From 3472cc3c29841c6ede8a0a51b9a78b2bcd7a3c42 Mon Sep 17 00:00:00 2001
From: lx <ex_lixiang17@cosl.com.cn>
Date: 星期三, 02 七月 2025 17:37:45 +0800
Subject: [PATCH] create

---
 ErrorAnalysis.Repository/Entity/GasnearResultTable.cs    |   29 
 ErrorAnalysis.Service/ErrorAnalysis.Service.csproj       |   13 
 ErrorAnalysis.Service/ErrorRatioCalc.cs                  |   24 
 ErrorAnalysis.Repository/Entity/GasfarResultTable.cs     |   29 
 ErrorAnalysis.Repository/Entity/RetMcnpDbContext.cs      |  975 +++++++++++++++++++++++++
 ErrorAnalysis.Repository/Entity/SigfarResultTable.cs     |   29 
 ErrorAnalysis.Repository/Entity/SignearResultTable.cs    |   23 
 ErrorAnalysis.Repository/Entity/CONearResultTable.cs     |   29 
 ErrorAnalysis.Repository/Entity/CONearWOLTable.cs        |   37 
 ErrorAnalysis.Repository/Entity/COFarWOLTable.cs         |   37 
 ErrorAnalysis.sln                                        |   22 
 ErrorAnalysis.UI/ErrorAnalysis.UI.csproj                 |   16 
 ErrorAnalysis.Repository/Entity/GasmodelTable.cs         |   35 
 ErrorAnalysis.Repository/Entity/COFarResultTable.cs      |   29 
 ErrorAnalysis.Repository/Entity/SigmodelTable.cs         |   43 +
 ErrorAnalysis.Repository/COWOLRepository.cs              |   23 
 ErrorAnalysis.Repository/Entity/COFarCASIRTable.cs       |   31 
 ErrorAnalysis.UI/Form1.cs                                |   21 
 ErrorAnalysis.Repository/CONearWOLRepository.cs          |   23 
 ErrorAnalysis.Repository/Entity/CONearCASIRTable.cs      |   31 
 ErrorAnalysis.UI/Form1.Designer.cs                       |   59 +
 ErrorAnalysis.Repository/Entity/Gasrintable.cs           |   31 
 ErrorAnalysis.Service/PDEVCalcService.cs                 |   26 
 ErrorAnalysis.Repository/ErrorAnalysis.Repository.csproj |   22 
 ErrorAnalysis.Repository/Entity/COFarSICARTable.cs       |   31 
 ErrorAnalysis.Repository/RepositoryBase.cs               |   14 
 ErrorAnalysis.Repository/COFarWOLRepository.cs           |   23 
 ErrorAnalysis.Repository/Entity/COSICARTable.cs          |   31 
 ErrorAnalysis.Repository/Entity/Gasrcaptable.cs          |   31 
 ErrorAnalysis.Repository/Entity/GaslongResultTable.cs    |   29 
 ErrorAnalysis.Service/COMergeCalcService.cs              |   86 ++
 ErrorAnalysis.Repository/Entity/CCOCASIRTable.cs         |   31 
 ErrorAnalysis.Repository/CONearResultRepository.cs       |   23 
 ErrorAnalysis.Service/Model/ErrorRatioModel.cs           |   22 
 /dev/null                                                |    7 
 ErrorAnalysis.UI/Form1.resx                              |   63 
 ErrorAnalysis.Repository/Entity/COLongResultTable.cs     |   29 
 ErrorAnalysis.Repository/Entity/CONearSICARTable.cs      |   31 
 ErrorAnalysis.Repository/Entity/Sigwoltable.cs           |   37 
 ErrorAnalysis.Repository/Entity/COModelTable.cs          |   43 +
 ErrorAnalysis.Repository/Entity/COWOLTable.cs            |   37 
 ErrorAnalysis.UI/Program.cs                              |   17 
 ErrorAnalysis.Repository/COFarResultRepository.cs        |   23 
 ErrorAnalysis.Repository/COModelRepository.cs            |   22 
 ErrorAnalysis.Repository/Entity/SiglongResultTable.cs    |   23 
 45 files changed, 2,248 insertions(+), 42 deletions(-)

diff --git a/ErrorAnalysis.Repository/COFarResultRepository.cs b/ErrorAnalysis.Repository/COFarResultRepository.cs
new file mode 100644
index 0000000..8554aed
--- /dev/null
+++ b/ErrorAnalysis.Repository/COFarResultRepository.cs
@@ -0,0 +1,23 @@
+锘縰sing ErrorAnalysis.Repository.Entity;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ErrorAnalysis.Repository
+{
+    public class COFarResultRepository : RepositoryBase
+    {
+        public COFarResultRepository(string connectionString) : base(connectionString) { }
+
+        public COFarResultTable GetCOFarResult(string modelId, int porosity, int sw)
+        {
+            using (var context = new RetMcnpDbContext(_connectionString))
+            {
+                var result = context.COFarResultTables.FirstOrDefault(x => x.ModelID == modelId && x.Porosity == porosity && x.Sw == sw);
+                return result;
+            }
+        }
+    }
+}
diff --git a/ErrorAnalysis.Repository/COFarWOLRepository.cs b/ErrorAnalysis.Repository/COFarWOLRepository.cs
new file mode 100644
index 0000000..cc32072
--- /dev/null
+++ b/ErrorAnalysis.Repository/COFarWOLRepository.cs
@@ -0,0 +1,23 @@
+锘縰sing ErrorAnalysis.Repository.Entity;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ErrorAnalysis.Repository
+{
+    public class COFarWOLRepository : RepositoryBase
+    {
+        public COFarWOLRepository(string connectionString) : base(connectionString) { }
+
+        public COFarWOLTable GetCOFarWOL(string modelId, int sw)
+        {
+            using (var context = new RetMcnpDbContext(_connectionString))
+            {
+                var result = context.COFarWOLTables.FirstOrDefault(x => x.ModelID == modelId && x.Sw == sw);
+                return result;
+            }
+        }
+    }
+}
diff --git a/ErrorAnalysis.Repository/COModelRepository.cs b/ErrorAnalysis.Repository/COModelRepository.cs
new file mode 100644
index 0000000..3c86097
--- /dev/null
+++ b/ErrorAnalysis.Repository/COModelRepository.cs
@@ -0,0 +1,22 @@
+锘縰sing ErrorAnalysis.Repository.Entity;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ErrorAnalysis.Repository
+{
+    public class COModelRepository : RepositoryBase
+    {
+        public COModelRepository(string connectionString) : base(connectionString) { }
+
+        public List<COModelTable> GetCOModels()
+        {
+            using (var context = new RetMcnpDbContext(_connectionString))
+            {
+                return context.COModelTables.ToList().OrderBy(c => c.BIT).OrderBy(c => c.CasingOD).ToList();
+            }
+        }
+    }
+}
diff --git a/ErrorAnalysis.Repository/CONearResultRepository.cs b/ErrorAnalysis.Repository/CONearResultRepository.cs
new file mode 100644
index 0000000..d3ef32c
--- /dev/null
+++ b/ErrorAnalysis.Repository/CONearResultRepository.cs
@@ -0,0 +1,23 @@
+锘縰sing ErrorAnalysis.Repository.Entity;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ErrorAnalysis.Repository
+{
+    public class CONearResultRepository : RepositoryBase
+    {
+        public CONearResultRepository(string connectionString) : base(connectionString) { }
+
+        public CONearResultTable GetCONearResult(string modelId, int porosity, int sw)
+        {
+            using (var context = new RetMcnpDbContext(_connectionString))
+            {
+                var result = context.CONearResultTables.FirstOrDefault(x => x.ModelID == modelId && x.Porosity == porosity && x.Sw == sw);
+                return result;
+            }
+        }
+    }
+}
diff --git a/ErrorAnalysis.Repository/CONearWOLRepository.cs b/ErrorAnalysis.Repository/CONearWOLRepository.cs
new file mode 100644
index 0000000..3f50071
--- /dev/null
+++ b/ErrorAnalysis.Repository/CONearWOLRepository.cs
@@ -0,0 +1,23 @@
+锘縰sing ErrorAnalysis.Repository.Entity;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ErrorAnalysis.Repository
+{
+    public class CONearWOLRepository : RepositoryBase
+    {
+        public CONearWOLRepository(string connectionString) : base(connectionString) { }
+
+        public CONearWOLTable GetCONearWOL(string modelId, int sw)
+        {
+            using (var context = new RetMcnpDbContext(_connectionString))
+            {
+                var result = context.CONearWOLTables.FirstOrDefault(x => x.ModelID == modelId && x.Sw == sw);
+                return result;
+            }
+        }
+    }
+}
diff --git a/ErrorAnalysis.Repository/COWOLRepository.cs b/ErrorAnalysis.Repository/COWOLRepository.cs
new file mode 100644
index 0000000..d2ecfcf
--- /dev/null
+++ b/ErrorAnalysis.Repository/COWOLRepository.cs
@@ -0,0 +1,23 @@
+锘縰sing ErrorAnalysis.Repository.Entity;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ErrorAnalysis.Repository
+{
+    public class COWOLRepository : RepositoryBase
+    {
+        public COWOLRepository(string connectionString) : base(connectionString) { }
+
+        public COWOLTable GetWOL(string modelId, int sw)
+        {
+            using (var context = new RetMcnpDbContext(_connectionString))
+            {
+                var result = context.COWOLTables.FirstOrDefault(x => x.ModelID == modelId && x.Sw == sw);
+                return result;
+            }
+        }
+    }
+}
diff --git a/ErrorAnalysis.Repository/Entity/CCOCASIRTable.cs b/ErrorAnalysis.Repository/Entity/CCOCASIRTable.cs
new file mode 100644
index 0000000..a6f4682
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/CCOCASIRTable.cs
@@ -0,0 +1,31 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class CCOCASIRTable
+{
+    public string COCASIRID { get; set; } = null!;
+
+    public string ModelID { get; set; } = null!;
+
+    public int? Sw { get; set; }
+
+    public double? WLPu0 { get; set; }
+
+    public double? WLPu5 { get; set; }
+
+    public double? WLPu10 { get; set; }
+
+    public double? WLPu15 { get; set; }
+
+    public double? WLPu20 { get; set; }
+
+    public double? WLPu25 { get; set; }
+
+    public double? WLPu30 { get; set; }
+
+    public double? WLPu35 { get; set; }
+
+    public double? WLPu40 { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/COFarCASIRTable.cs b/ErrorAnalysis.Repository/Entity/COFarCASIRTable.cs
new file mode 100644
index 0000000..95074a9
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/COFarCASIRTable.cs
@@ -0,0 +1,31 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class COFarCASIRTable
+{
+    public string COCASIRID { get; set; } = null!;
+
+    public string ModelID { get; set; } = null!;
+
+    public int? Sw { get; set; }
+
+    public double? WLPu0 { get; set; }
+
+    public double? WLPu5 { get; set; }
+
+    public double? WLPu10 { get; set; }
+
+    public double? WLPu15 { get; set; }
+
+    public double? WLPu20 { get; set; }
+
+    public double? WLPu25 { get; set; }
+
+    public double? WLPu30 { get; set; }
+
+    public double? WLPu35 { get; set; }
+
+    public double? WLPu40 { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/COFarResultTable.cs b/ErrorAnalysis.Repository/Entity/COFarResultTable.cs
new file mode 100644
index 0000000..483bdeb
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/COFarResultTable.cs
@@ -0,0 +1,29 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class COFarResultTable
+{
+    public string ID { get; set; } = null!;
+
+    public string ModelID { get; set; } = null!;
+
+    public int Porosity { get; set; }
+
+    public int? Sw { get; set; }
+
+    public string? InelasticSpec { get; set; }
+
+    public string? Capture1Spec { get; set; }
+
+    public string? Capture2Spec { get; set; }
+
+    public string? TimeSpec { get; set; }
+
+    public string? CInelasticSpec { get; set; }
+
+    public string? CCapture1Spec { get; set; }
+
+    public string? CCapture2Spec { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/COFarSICARTable.cs b/ErrorAnalysis.Repository/Entity/COFarSICARTable.cs
new file mode 100644
index 0000000..2c8abb7
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/COFarSICARTable.cs
@@ -0,0 +1,31 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class COFarSICARTable
+{
+    public string COSICARID { get; set; } = null!;
+
+    public string ModelID { get; set; } = null!;
+
+    public int? Sw { get; set; }
+
+    public double? WLPu0 { get; set; }
+
+    public double? WLPu5 { get; set; }
+
+    public double? WLPu10 { get; set; }
+
+    public double? WLPu15 { get; set; }
+
+    public double? WLPu20 { get; set; }
+
+    public double? WLPu25 { get; set; }
+
+    public double? WLPu30 { get; set; }
+
+    public double? WLPu35 { get; set; }
+
+    public double? WLPu40 { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/COFarWOLTable.cs b/ErrorAnalysis.Repository/Entity/COFarWOLTable.cs
new file mode 100644
index 0000000..f56b98a
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/COFarWOLTable.cs
@@ -0,0 +1,37 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class COFarWOLTable
+{
+    public string COWOLID { get; set; } = null!;
+
+    public string ModelID { get; set; } = null!;
+
+    public int? Sw { get; set; }
+
+    public double? WLPu0 { get; set; }
+
+    public double? WLPu5 { get; set; }
+
+    public double? WLPu10 { get; set; }
+
+    public double? WLPu15 { get; set; }
+
+    public double? WLPu20 { get; set; }
+
+    public double? WLPu25 { get; set; }
+
+    public double? WLPu30 { get; set; }
+
+    public double? WLPu35 { get; set; }
+
+    public double? WLPu40 { get; set; }
+
+    public double? A0 { get; set; }
+
+    public double? A1 { get; set; }
+
+    public double? A2 { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/COLongResultTable.cs b/ErrorAnalysis.Repository/Entity/COLongResultTable.cs
new file mode 100644
index 0000000..1207529
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/COLongResultTable.cs
@@ -0,0 +1,29 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class COLongResultTable
+{
+    public string? ID { get; set; }
+
+    public string? ModelID { get; set; }
+
+    public int? Porosity { get; set; }
+
+    public int? Sw { get; set; }
+
+    public string? InelasticSpec { get; set; }
+
+    public string? Capture1Spec { get; set; }
+
+    public decimal? Capture2Spec { get; set; }
+
+    public string? TimeSpec { get; set; }
+
+    public string? CInelasticSpec { get; set; }
+
+    public string? CCapture1Spec { get; set; }
+
+    public string? CCapture2Spec { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/COModelTable.cs b/ErrorAnalysis.Repository/Entity/COModelTable.cs
new file mode 100644
index 0000000..ae74d92
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/COModelTable.cs
@@ -0,0 +1,43 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class COModelTable
+{
+    public string ModelID { get; set; } = null!;
+
+    public decimal BIT { get; set; }
+
+    public decimal CasingOD { get; set; }
+
+    public decimal CasingID { get; set; }
+
+    public decimal? ScreenOD { get; set; }
+
+    public string? ScreenID { get; set; }
+
+    public string TubeOD { get; set; } = null!;
+
+    public decimal TubeID { get; set; }
+
+    public string Lithology { get; set; } = null!;
+
+    public string? VSH { get; set; }
+
+    public decimal? OilDensity { get; set; }
+
+    public string? BHSalinity { get; set; }
+
+    public string? ReservoirSalinity { get; set; }
+
+    public string? TubeFluid { get; set; }
+
+    public string? ScreenFluid { get; set; }
+
+    public string? CasingFluid { get; set; }
+
+    public string? CementBond { get; set; }
+
+    public string? GravelFillPercent { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/CONearCASIRTable.cs b/ErrorAnalysis.Repository/Entity/CONearCASIRTable.cs
new file mode 100644
index 0000000..3ca5e46
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/CONearCASIRTable.cs
@@ -0,0 +1,31 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class CONearCASIRTable
+{
+    public string COCASIRID { get; set; } = null!;
+
+    public string ModelID { get; set; } = null!;
+
+    public int? Sw { get; set; }
+
+    public double? WLPu0 { get; set; }
+
+    public double? WLPu5 { get; set; }
+
+    public double? WLPu10 { get; set; }
+
+    public double? WLPu15 { get; set; }
+
+    public double? WLPu20 { get; set; }
+
+    public double? WLPu25 { get; set; }
+
+    public double? WLPu30 { get; set; }
+
+    public double? WLPu35 { get; set; }
+
+    public double? WLPu40 { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/CONearResultTable.cs b/ErrorAnalysis.Repository/Entity/CONearResultTable.cs
new file mode 100644
index 0000000..8263d31
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/CONearResultTable.cs
@@ -0,0 +1,29 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class CONearResultTable
+{
+    public string ID { get; set; } = null!;
+
+    public string ModelID { get; set; } = null!;
+
+    public int Porosity { get; set; }
+
+    public int? Sw { get; set; }
+
+    public string? InelasticSpec { get; set; }
+
+    public string? Capture1Spec { get; set; }
+
+    public string? Capture2Spec { get; set; }
+
+    public string? TimeSpec { get; set; }
+
+    public string? CInelasticSpec { get; set; }
+
+    public string? CCapture1Spec { get; set; }
+
+    public string? CCapture2Spec { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/CONearSICARTable.cs b/ErrorAnalysis.Repository/Entity/CONearSICARTable.cs
new file mode 100644
index 0000000..c4a5647
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/CONearSICARTable.cs
@@ -0,0 +1,31 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class CONearSICARTable
+{
+    public string COSICARID { get; set; } = null!;
+
+    public string ModelID { get; set; } = null!;
+
+    public int? Sw { get; set; }
+
+    public double? WLPu0 { get; set; }
+
+    public double? WLPu5 { get; set; }
+
+    public double? WLPu10 { get; set; }
+
+    public double? WLPu15 { get; set; }
+
+    public double? WLPu20 { get; set; }
+
+    public double? WLPu25 { get; set; }
+
+    public double? WLPu30 { get; set; }
+
+    public double? WLPu35 { get; set; }
+
+    public double? WLPu40 { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/CONearWOLTable.cs b/ErrorAnalysis.Repository/Entity/CONearWOLTable.cs
new file mode 100644
index 0000000..560204d
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/CONearWOLTable.cs
@@ -0,0 +1,37 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class CONearWOLTable
+{
+    public string COWOLID { get; set; } = null!;
+
+    public string ModelID { get; set; } = null!;
+
+    public int? Sw { get; set; }
+
+    public double? WLPu0 { get; set; }
+
+    public double? WLPu5 { get; set; }
+
+    public double? WLPu10 { get; set; }
+
+    public double? WLPu15 { get; set; }
+
+    public double? WLPu20 { get; set; }
+
+    public double? WLPu25 { get; set; }
+
+    public double? WLPu30 { get; set; }
+
+    public double? WLPu35 { get; set; }
+
+    public double? WLPu40 { get; set; }
+
+    public double? A0 { get; set; }
+
+    public double? A1 { get; set; }
+
+    public double? A2 { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/COSICARTable.cs b/ErrorAnalysis.Repository/Entity/COSICARTable.cs
new file mode 100644
index 0000000..bfd9e8c
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/COSICARTable.cs
@@ -0,0 +1,31 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class COSICARTable
+{
+    public string COSICARID { get; set; } = null!;
+
+    public string ModelID { get; set; } = null!;
+
+    public int? Sw { get; set; }
+
+    public double? WLPu0 { get; set; }
+
+    public double? WLPu5 { get; set; }
+
+    public double? WLPu10 { get; set; }
+
+    public double? WLPu15 { get; set; }
+
+    public double? WLPu20 { get; set; }
+
+    public double? WLPu25 { get; set; }
+
+    public double? WLPu30 { get; set; }
+
+    public double? WLPu35 { get; set; }
+
+    public double? WLPu40 { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/COWOLTable.cs b/ErrorAnalysis.Repository/Entity/COWOLTable.cs
new file mode 100644
index 0000000..dd215ad
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/COWOLTable.cs
@@ -0,0 +1,37 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class COWOLTable
+{
+    public string COSICARID { get; set; } = null!;
+
+    public string ModelID { get; set; } = null!;
+
+    public int? Sw { get; set; }
+
+    public double? WLPu0 { get; set; }
+
+    public double? WLPu5 { get; set; }
+
+    public double? WLPu10 { get; set; }
+
+    public double? WLPu15 { get; set; }
+
+    public double? WLPu20 { get; set; }
+
+    public double? WLPu25 { get; set; }
+
+    public double? WLPu30 { get; set; }
+
+    public double? WLPu35 { get; set; }
+
+    public double? WLPu40 { get; set; }
+
+    public double? A0 { get; set; }
+
+    public double? A1 { get; set; }
+
+    public double? A2 { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/GasfarResultTable.cs b/ErrorAnalysis.Repository/Entity/GasfarResultTable.cs
new file mode 100644
index 0000000..2b3e2ef
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/GasfarResultTable.cs
@@ -0,0 +1,29 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class GasfarResultTable
+{
+    public string? Id { get; set; }
+
+    public string? ModelId { get; set; }
+
+    public int? Porosity { get; set; }
+
+    public int? Sw { get; set; }
+
+    public string? InelasticSpec { get; set; }
+
+    public string? Capture1Spec { get; set; }
+
+    public string? Capture2Spec { get; set; }
+
+    public string? TimeSpec { get; set; }
+
+    public string? CinelasticSpec { get; set; }
+
+    public string? Ccapture1Spec { get; set; }
+
+    public string? Ccapture2Spec { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/GaslongResultTable.cs b/ErrorAnalysis.Repository/Entity/GaslongResultTable.cs
new file mode 100644
index 0000000..b2152dc
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/GaslongResultTable.cs
@@ -0,0 +1,29 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class GaslongResultTable
+{
+    public string? Id { get; set; }
+
+    public string? ModelId { get; set; }
+
+    public int? Porosity { get; set; }
+
+    public int? Sw { get; set; }
+
+    public string? InelasticSpec { get; set; }
+
+    public string? Capture1Spec { get; set; }
+
+    public string? Capture2Spec { get; set; }
+
+    public string? TimeSpec { get; set; }
+
+    public string? CinelasticSpec { get; set; }
+
+    public string? Ccapture1Spec { get; set; }
+
+    public string? Ccapture2Spec { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/GasmodelTable.cs b/ErrorAnalysis.Repository/Entity/GasmodelTable.cs
new file mode 100644
index 0000000..636f14f
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/GasmodelTable.cs
@@ -0,0 +1,35 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class GasmodelTable
+{
+    public string? ModelId { get; set; }
+
+    public string? Bit { get; set; }
+
+    public string? CasingDiameter { get; set; }
+
+    public string? ScreenPipeDiameter { get; set; }
+
+    public string? TubeDiameter { get; set; }
+
+    public string? Lithology { get; set; }
+
+    public string? Vsh { get; set; }
+
+    public string? OilDensity { get; set; }
+
+    public string? Bhsalinity { get; set; }
+
+    public string? ReservoirSalinity { get; set; }
+
+    public string? TubeOilHoldUp { get; set; }
+
+    public string? AnnulusOilHoldUp { get; set; }
+
+    public string? CementBond { get; set; }
+
+    public string? GravelFill { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/GasnearResultTable.cs b/ErrorAnalysis.Repository/Entity/GasnearResultTable.cs
new file mode 100644
index 0000000..c24bbfc
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/GasnearResultTable.cs
@@ -0,0 +1,29 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class GasnearResultTable
+{
+    public string? Id { get; set; }
+
+    public string? ModelId { get; set; }
+
+    public int? Porosity { get; set; }
+
+    public int? Sw { get; set; }
+
+    public string? InelasticSpec { get; set; }
+
+    public string? Capture1Spec { get; set; }
+
+    public string? Capture2Spec { get; set; }
+
+    public string? TimeSpec { get; set; }
+
+    public string? CinelasticSpec { get; set; }
+
+    public string? Ccapture1Spec { get; set; }
+
+    public string? Ccapture2Spec { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/Gasrcaptable.cs b/ErrorAnalysis.Repository/Entity/Gasrcaptable.cs
new file mode 100644
index 0000000..c6fa0c2
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/Gasrcaptable.cs
@@ -0,0 +1,31 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class Gasrcaptable
+{
+    public string? Gasrcapid { get; set; }
+
+    public string? ModelId { get; set; }
+
+    public int? Sw { get; set; }
+
+    public double? Wlpu0 { get; set; }
+
+    public double? Wlpu5 { get; set; }
+
+    public double? Wlpu10 { get; set; }
+
+    public double? Wlpu15 { get; set; }
+
+    public double? Wlpu20 { get; set; }
+
+    public double? Wlpu25 { get; set; }
+
+    public double? Wlpu30 { get; set; }
+
+    public double? Wlpu35 { get; set; }
+
+    public double? Wlpu40 { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/Gasrintable.cs b/ErrorAnalysis.Repository/Entity/Gasrintable.cs
new file mode 100644
index 0000000..a4d0e89
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/Gasrintable.cs
@@ -0,0 +1,31 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class Gasrintable
+{
+    public string? Gasrinid { get; set; }
+
+    public string? ModelId { get; set; }
+
+    public int? Sw { get; set; }
+
+    public double? Wlpu0 { get; set; }
+
+    public double? Wlpu5 { get; set; }
+
+    public double? Wlpu10 { get; set; }
+
+    public double? Wlpu15 { get; set; }
+
+    public double? Wlpu20 { get; set; }
+
+    public double? Wlpu25 { get; set; }
+
+    public double? Wlpu30 { get; set; }
+
+    public double? Wlpu35 { get; set; }
+
+    public double? Wlpu40 { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/RetMcnpDbContext.cs b/ErrorAnalysis.Repository/Entity/RetMcnpDbContext.cs
new file mode 100644
index 0000000..475a315
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/RetMcnpDbContext.cs
@@ -0,0 +1,975 @@
+锘縰sing System;
+using System.Collections.Generic;
+using Microsoft.EntityFrameworkCore;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class RetMcnpDbContext : DbContext
+{
+    public readonly string _connectionString;
+    public RetMcnpDbContext()
+    {
+    }
+
+    public RetMcnpDbContext(DbContextOptions<RetMcnpDbContext> options)
+        : base(options)
+    {
+    }
+
+    public RetMcnpDbContext(string connectionString) : base()
+    {
+        _connectionString = connectionString;
+    }
+
+    public virtual DbSet<CCOCASIRTable> CCOCASIRTables { get; set; }
+
+    public virtual DbSet<COFarCASIRTable> COFarCASIRTables { get; set; }
+
+    public virtual DbSet<COFarResultTable> COFarResultTables { get; set; }
+
+    public virtual DbSet<COFarSICARTable> COFarSICARTables { get; set; }
+
+    public virtual DbSet<COFarWOLTable> COFarWOLTables { get; set; }
+
+    public virtual DbSet<COLongResultTable> COLongResultTables { get; set; }
+
+    public virtual DbSet<COModelTable> COModelTables { get; set; }
+
+    public virtual DbSet<CONearCASIRTable> CONearCASIRTables { get; set; }
+
+    public virtual DbSet<CONearResultTable> CONearResultTables { get; set; }
+
+    public virtual DbSet<CONearSICARTable> CONearSICARTables { get; set; }
+
+    public virtual DbSet<CONearWOLTable> CONearWOLTables { get; set; }
+
+    public virtual DbSet<COSICARTable> COSICARTables { get; set; }
+
+    public virtual DbSet<COWOLTable> COWOLTables { get; set; }
+
+    public virtual DbSet<GasfarResultTable> GasfarResultTables { get; set; }
+
+    public virtual DbSet<GaslongResultTable> GaslongResultTables { get; set; }
+
+    public virtual DbSet<GasmodelTable> GasmodelTables { get; set; }
+
+    public virtual DbSet<GasnearResultTable> GasnearResultTables { get; set; }
+
+    public virtual DbSet<Gasrcaptable> Gasrcaptables { get; set; }
+
+    public virtual DbSet<Gasrintable> Gasrintables { get; set; }
+
+    public virtual DbSet<SigfarResultTable> SigfarResultTables { get; set; }
+
+    public virtual DbSet<SiglongResultTable> SiglongResultTables { get; set; }
+
+    public virtual DbSet<SigmodelTable> SigmodelTables { get; set; }
+
+    public virtual DbSet<SignearResultTable> SignearResultTables { get; set; }
+
+    public virtual DbSet<Sigwoltable> Sigwoltables { get; set; }
+
+    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseSqlite(_connectionString);
+    //"Data Source=D:\\Pro\\cosl\\ErrorRate\\RetMcnpDB.db"
+    protected override void OnModelCreating(ModelBuilder modelBuilder)
+    {
+        modelBuilder.Entity<CCOCASIRTable>(entity =>
+        {
+            entity.HasKey(e => e.COCASIRID);
+
+            entity.ToTable("COCASIRTable");
+
+            entity.Property(e => e.COCASIRID)
+                .HasColumnType("nvarchar(200)")
+                .HasColumnName("COCASIRID");
+            entity.Property(e => e.ModelID)
+                .HasColumnType("nvarchar(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.WLPu0)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu0");
+            entity.Property(e => e.WLPu10)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu10");
+            entity.Property(e => e.WLPu15)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu15");
+            entity.Property(e => e.WLPu20)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu20");
+            entity.Property(e => e.WLPu25)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu25");
+            entity.Property(e => e.WLPu30)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu30");
+            entity.Property(e => e.WLPu35)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu35");
+            entity.Property(e => e.WLPu40)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu40");
+            entity.Property(e => e.WLPu5)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu5");
+        });
+
+        modelBuilder.Entity<COFarCASIRTable>(entity =>
+        {
+            entity.HasKey(e => e.COCASIRID);
+
+            entity.ToTable("COFarCASIRTable");
+
+            entity.Property(e => e.COCASIRID)
+                .HasColumnType("nvarchar(200)")
+                .HasColumnName("COCASIRID");
+            entity.Property(e => e.ModelID)
+                .HasColumnType("nvarchar(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.WLPu0)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu0");
+            entity.Property(e => e.WLPu10)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu10");
+            entity.Property(e => e.WLPu15)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu15");
+            entity.Property(e => e.WLPu20)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu20");
+            entity.Property(e => e.WLPu25)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu25");
+            entity.Property(e => e.WLPu30)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu30");
+            entity.Property(e => e.WLPu35)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu35");
+            entity.Property(e => e.WLPu40)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu40");
+            entity.Property(e => e.WLPu5)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu5");
+        });
+
+        modelBuilder.Entity<COFarResultTable>(entity =>
+        {
+            entity.ToTable("COFarResultTable");
+
+            entity.Property(e => e.ID)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ID");
+            entity.Property(e => e.Capture1Spec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.Capture2Spec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.CCapture1Spec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CCapture1Spec");
+            entity.Property(e => e.CCapture2Spec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CCapture2Spec");
+            entity.Property(e => e.CInelasticSpec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CInelasticSpec");
+            entity.Property(e => e.InelasticSpec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.ModelID)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Porosity).HasColumnType("INT");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.TimeSpec).HasColumnType("NVARCHAR(500)");
+        });
+
+        modelBuilder.Entity<COFarSICARTable>(entity =>
+        {
+            entity.HasKey(e => e.COSICARID);
+
+            entity.ToTable("COFarSICARTable");
+
+            entity.Property(e => e.COSICARID)
+                .HasColumnType("nvarchar(200)")
+                .HasColumnName("COSICARID");
+            entity.Property(e => e.ModelID)
+                .HasColumnType("nvarchar(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.WLPu0)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu0");
+            entity.Property(e => e.WLPu10)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu10");
+            entity.Property(e => e.WLPu15)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu15");
+            entity.Property(e => e.WLPu20)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu20");
+            entity.Property(e => e.WLPu25)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu25");
+            entity.Property(e => e.WLPu30)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu30");
+            entity.Property(e => e.WLPu35)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu35");
+            entity.Property(e => e.WLPu40)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu40");
+            entity.Property(e => e.WLPu5)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu5");
+        });
+
+        modelBuilder.Entity<COFarWOLTable>(entity =>
+        {
+            entity.HasKey(e => e.COWOLID);
+
+            entity.ToTable("COFarWOLTable");
+
+            entity.Property(e => e.COWOLID)
+                .HasColumnType("nvarchar(200)")
+                .HasColumnName("COWOLID");
+            entity.Property(e => e.A0)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("a0");
+            entity.Property(e => e.A1)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("a1");
+            entity.Property(e => e.A2)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("a2");
+            entity.Property(e => e.ModelID)
+                .HasColumnType("nvarchar(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.WLPu0)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu0");
+            entity.Property(e => e.WLPu10)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu10");
+            entity.Property(e => e.WLPu15)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu15");
+            entity.Property(e => e.WLPu20)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu20");
+            entity.Property(e => e.WLPu25)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu25");
+            entity.Property(e => e.WLPu30)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu30");
+            entity.Property(e => e.WLPu35)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu35");
+            entity.Property(e => e.WLPu40)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu40");
+            entity.Property(e => e.WLPu5)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu5");
+        });
+
+        modelBuilder.Entity<COLongResultTable>(entity =>
+        {
+            entity
+                .HasNoKey()
+                .ToTable("COLongResultTable");
+
+            entity.Property(e => e.Capture1Spec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.Capture2Spec).HasColumnType("NUMERIC(4000)");
+            entity.Property(e => e.CCapture1Spec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CCapture1Spec");
+            entity.Property(e => e.CCapture2Spec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CCapture2Spec");
+            entity.Property(e => e.CInelasticSpec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CInelasticSpec");
+            entity.Property(e => e.ID)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ID");
+            entity.Property(e => e.InelasticSpec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.ModelID)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Porosity).HasColumnType("INT");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.TimeSpec).HasColumnType("NVARCHAR(500)");
+        });
+
+        modelBuilder.Entity<COModelTable>(entity =>
+        {
+            entity.HasKey(e => e.ModelID);
+
+            entity.ToTable("COModelTable");
+
+            entity.Property(e => e.ModelID)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.BHSalinity)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("BHSalinity");
+            entity.Property(e => e.BIT)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("BIT");
+            entity.Property(e => e.CasingFluid).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.CasingID)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("CasingID");
+            entity.Property(e => e.CasingOD)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("CasingOD");
+            entity.Property(e => e.CementBond).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.GravelFillPercent).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.Lithology).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.OilDensity).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.ReservoirSalinity).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.ScreenFluid).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.ScreenID)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("ScreenID");
+            entity.Property(e => e.ScreenOD)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("ScreenOD");
+            entity.Property(e => e.TubeFluid).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.TubeID)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("TubeID");
+            entity.Property(e => e.TubeOD)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("TubeOD");
+            entity.Property(e => e.VSH)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("VSH");
+        });
+
+        modelBuilder.Entity<CONearCASIRTable>(entity =>
+        {
+            entity.HasKey(e => e.COCASIRID);
+
+            entity.ToTable("CONearCASIRTable");
+
+            entity.Property(e => e.COCASIRID)
+                .HasColumnType("nvarchar(200)")
+                .HasColumnName("COCASIRID");
+            entity.Property(e => e.ModelID)
+                .HasColumnType("nvarchar(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.WLPu0)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu0");
+            entity.Property(e => e.WLPu10)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu10");
+            entity.Property(e => e.WLPu15)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu15");
+            entity.Property(e => e.WLPu20)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu20");
+            entity.Property(e => e.WLPu25)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu25");
+            entity.Property(e => e.WLPu30)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu30");
+            entity.Property(e => e.WLPu35)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu35");
+            entity.Property(e => e.WLPu40)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu40");
+            entity.Property(e => e.WLPu5)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu5");
+        });
+
+        modelBuilder.Entity<CONearResultTable>(entity =>
+        {
+            entity.ToTable("CONearResultTable");
+
+            entity.Property(e => e.ID)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ID");
+            entity.Property(e => e.Capture1Spec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.Capture2Spec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.CCapture1Spec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CCapture1Spec");
+            entity.Property(e => e.CCapture2Spec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CCapture2Spec");
+            entity.Property(e => e.CInelasticSpec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CInelasticSpec");
+            entity.Property(e => e.InelasticSpec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.ModelID)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Porosity).HasColumnType("INT");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.TimeSpec).HasColumnType("NVARCHAR(500)");
+        });
+
+        modelBuilder.Entity<CONearSICARTable>(entity =>
+        {
+            entity.HasKey(e => e.COSICARID);
+
+            entity.ToTable("CONearSICARTable");
+
+            entity.Property(e => e.COSICARID)
+                .HasColumnType("nvarchar(200)")
+                .HasColumnName("COSICARID");
+            entity.Property(e => e.ModelID)
+                .HasColumnType("nvarchar(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.WLPu0)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu0");
+            entity.Property(e => e.WLPu10)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu10");
+            entity.Property(e => e.WLPu15)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu15");
+            entity.Property(e => e.WLPu20)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu20");
+            entity.Property(e => e.WLPu25)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu25");
+            entity.Property(e => e.WLPu30)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu30");
+            entity.Property(e => e.WLPu35)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu35");
+            entity.Property(e => e.WLPu40)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu40");
+            entity.Property(e => e.WLPu5)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu5");
+        });
+
+        modelBuilder.Entity<CONearWOLTable>(entity =>
+        {
+            entity.HasKey(e => e.COWOLID);
+
+            entity.ToTable("CONearWOLTable");
+
+            entity.Property(e => e.COWOLID)
+                .HasColumnType("nvarchar(200)")
+                .HasColumnName("COWOLID");
+            entity.Property(e => e.A0)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("a0");
+            entity.Property(e => e.A1)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("a1");
+            entity.Property(e => e.A2)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("a2");
+            entity.Property(e => e.ModelID)
+                .HasColumnType("nvarchar(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.WLPu0)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu0");
+            entity.Property(e => e.WLPu10)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu10");
+            entity.Property(e => e.WLPu15)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu15");
+            entity.Property(e => e.WLPu20)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu20");
+            entity.Property(e => e.WLPu25)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu25");
+            entity.Property(e => e.WLPu30)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu30");
+            entity.Property(e => e.WLPu35)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu35");
+            entity.Property(e => e.WLPu40)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu40");
+            entity.Property(e => e.WLPu5)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu5");
+        });
+
+        modelBuilder.Entity<COSICARTable>(entity =>
+        {
+            entity.HasKey(e => e.COSICARID);
+
+            entity.ToTable("COSICARTable");
+
+            entity.Property(e => e.COSICARID)
+                .HasColumnType("nvarchar(200)")
+                .HasColumnName("COSICARID");
+            entity.Property(e => e.ModelID)
+                .HasColumnType("nvarchar(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.WLPu0)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu0");
+            entity.Property(e => e.WLPu10)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu10");
+            entity.Property(e => e.WLPu15)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu15");
+            entity.Property(e => e.WLPu20)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu20");
+            entity.Property(e => e.WLPu25)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu25");
+            entity.Property(e => e.WLPu30)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu30");
+            entity.Property(e => e.WLPu35)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu35");
+            entity.Property(e => e.WLPu40)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu40");
+            entity.Property(e => e.WLPu5)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu5");
+        });
+
+        modelBuilder.Entity<COWOLTable>(entity =>
+        {
+            entity.HasKey(e => e.COSICARID);
+
+            entity.ToTable("COWOLTable");
+
+            entity.Property(e => e.COSICARID)
+                .HasColumnType("nvarchar(200)")
+                .HasColumnName("COWOLID");
+            entity.Property(e => e.A0)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("a0");
+            entity.Property(e => e.A1)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("a1");
+            entity.Property(e => e.A2)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("a2");
+            entity.Property(e => e.ModelID)
+                .HasColumnType("nvarchar(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.WLPu0)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu0");
+            entity.Property(e => e.WLPu10)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu10");
+            entity.Property(e => e.WLPu15)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu15");
+            entity.Property(e => e.WLPu20)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu20");
+            entity.Property(e => e.WLPu25)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu25");
+            entity.Property(e => e.WLPu30)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu30");
+            entity.Property(e => e.WLPu35)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu35");
+            entity.Property(e => e.WLPu40)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu40");
+            entity.Property(e => e.WLPu5)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu5");
+        });
+
+        modelBuilder.Entity<GasfarResultTable>(entity =>
+        {
+            entity
+                .HasNoKey()
+                .ToTable("GASFarResultTable");
+
+            entity.Property(e => e.Capture1Spec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.Capture2Spec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.Ccapture1Spec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CCapture1Spec");
+            entity.Property(e => e.Ccapture2Spec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CCapture2Spec");
+            entity.Property(e => e.CinelasticSpec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CInelasticSpec");
+            entity.Property(e => e.Id)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ID");
+            entity.Property(e => e.InelasticSpec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.ModelId)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Porosity).HasColumnType("INT");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.TimeSpec).HasColumnType("NVARCHAR(500)");
+        });
+
+        modelBuilder.Entity<GaslongResultTable>(entity =>
+        {
+            entity
+                .HasNoKey()
+                .ToTable("GASLongResultTable");
+
+            entity.Property(e => e.Capture1Spec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.Capture2Spec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.Ccapture1Spec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CCapture1Spec");
+            entity.Property(e => e.Ccapture2Spec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CCapture2Spec");
+            entity.Property(e => e.CinelasticSpec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CInelasticSpec");
+            entity.Property(e => e.Id)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ID");
+            entity.Property(e => e.InelasticSpec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.ModelId)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Porosity).HasColumnType("INT");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.TimeSpec).HasColumnType("NVARCHAR(500)");
+        });
+
+        modelBuilder.Entity<GasmodelTable>(entity =>
+        {
+            entity
+                .HasNoKey()
+                .ToTable("GASModelTable");
+
+            entity.Property(e => e.AnnulusOilHoldUp).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.Bhsalinity)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("BHSalinity");
+            entity.Property(e => e.Bit)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("BIT");
+            entity.Property(e => e.CasingDiameter).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.CementBond).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.GravelFill).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.Lithology).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.ModelId)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.OilDensity).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.ReservoirSalinity).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.ScreenPipeDiameter).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.TubeDiameter).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.TubeOilHoldUp).HasColumnType("NVARCHAR");
+            entity.Property(e => e.Vsh)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("VSH");
+        });
+
+        modelBuilder.Entity<GasnearResultTable>(entity =>
+        {
+            entity
+                .HasNoKey()
+                .ToTable("GASNearResultTable");
+
+            entity.Property(e => e.Capture1Spec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.Capture2Spec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.Ccapture1Spec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CCapture1Spec");
+            entity.Property(e => e.Ccapture2Spec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CCapture2Spec");
+            entity.Property(e => e.CinelasticSpec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CInelasticSpec");
+            entity.Property(e => e.Id)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ID");
+            entity.Property(e => e.InelasticSpec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.ModelId)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Porosity).HasColumnType("INT");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.TimeSpec).HasColumnType("NVARCHAR(500)");
+        });
+
+        modelBuilder.Entity<Gasrcaptable>(entity =>
+        {
+            entity
+                .HasNoKey()
+                .ToTable("GASRCAPTable");
+
+            entity.Property(e => e.Gasrcapid)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("GASRCAPID");
+            entity.Property(e => e.ModelId)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.Wlpu0)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu0");
+            entity.Property(e => e.Wlpu10)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu10");
+            entity.Property(e => e.Wlpu15)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu15");
+            entity.Property(e => e.Wlpu20)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu20");
+            entity.Property(e => e.Wlpu25)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu25");
+            entity.Property(e => e.Wlpu30)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu30");
+            entity.Property(e => e.Wlpu35)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu35");
+            entity.Property(e => e.Wlpu40)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu40");
+            entity.Property(e => e.Wlpu5)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu5");
+        });
+
+        modelBuilder.Entity<Gasrintable>(entity =>
+        {
+            entity
+                .HasNoKey()
+                .ToTable("GASRINTable");
+
+            entity.Property(e => e.Gasrinid)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("GASRINID");
+            entity.Property(e => e.ModelId)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.Wlpu0)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu0");
+            entity.Property(e => e.Wlpu10)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu10");
+            entity.Property(e => e.Wlpu15)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu15");
+            entity.Property(e => e.Wlpu20)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu20");
+            entity.Property(e => e.Wlpu25)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu25");
+            entity.Property(e => e.Wlpu30)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu30");
+            entity.Property(e => e.Wlpu35)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu35");
+            entity.Property(e => e.Wlpu40)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu40");
+            entity.Property(e => e.Wlpu5)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu5");
+        });
+
+        modelBuilder.Entity<SigfarResultTable>(entity =>
+        {
+            entity.ToTable("SIGFarResultTable");
+
+            entity.Property(e => e.Id)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ID");
+            entity.Property(e => e.Capture1Spec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.Capture2Spec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.Ccapture1Spec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CCapture1Spec");
+            entity.Property(e => e.Ccapture2Spec)
+                .HasColumnType("NVARCHAR(4000)")
+                .HasColumnName("CCapture2Spec");
+            entity.Property(e => e.CinelasticSpec)
+                .HasColumnType("NUMERIC(4000)")
+                .HasColumnName("CInelasticSpec");
+            entity.Property(e => e.InelasticSpec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.ModelId)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Porosity).HasColumnType("INT");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.TimeSpec).HasColumnType("NVARCHAR(500)");
+        });
+
+        modelBuilder.Entity<SiglongResultTable>(entity =>
+        {
+            entity.ToTable("SIGLongResultTable");
+
+            entity.Property(e => e.Id)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ID");
+            entity.Property(e => e.Capture1Spec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.Capture2Spec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.InelasticSpec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.ModelId)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Porosity).HasColumnType("INT");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.TimeSpec).HasColumnType("NVARCHAR(500)");
+        });
+
+        modelBuilder.Entity<SigmodelTable>(entity =>
+        {
+            entity.HasKey(e => e.ModelId);
+
+            entity.ToTable("SIGModelTable");
+
+            entity.Property(e => e.ModelId)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Bhsalinity)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("BHSalinity");
+            entity.Property(e => e.Bit)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("BIT");
+            entity.Property(e => e.CasingFluid).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.CasingId)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("CasingID");
+            entity.Property(e => e.CasingOd)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("CasingOD");
+            entity.Property(e => e.CementBond).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.GravelFillPercent).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.Lithology).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.OilDensity).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.ReservoirSalinity).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.ScreenFluid).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.ScreenId)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("ScreenID");
+            entity.Property(e => e.ScreenOd)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("ScreenOD");
+            entity.Property(e => e.TubeFluid).HasColumnType("NVARCHAR(50)");
+            entity.Property(e => e.TubeId)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("TubeID");
+            entity.Property(e => e.TubeOd)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("TubeOD");
+            entity.Property(e => e.Vsh)
+                .HasColumnType("NVARCHAR(50)")
+                .HasColumnName("VSH");
+        });
+
+        modelBuilder.Entity<SignearResultTable>(entity =>
+        {
+            entity.ToTable("SIGNearResultTable");
+
+            entity.Property(e => e.Id)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ID");
+            entity.Property(e => e.Capture1Spec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.Capture2Spec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.InelasticSpec).HasColumnType("NVARCHAR(4000)");
+            entity.Property(e => e.ModelId)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Porosity).HasColumnType("INT");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.TimeSpec).HasColumnType("NVARCHAR(500)");
+        });
+
+        modelBuilder.Entity<Sigwoltable>(entity =>
+        {
+            entity.HasKey(e => e.Cowolid);
+
+            entity.ToTable("SIGWOLTable");
+
+            entity.Property(e => e.Cowolid)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("COWOLID");
+            entity.Property(e => e.A0)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("a0");
+            entity.Property(e => e.A1)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("a1");
+            entity.Property(e => e.A2)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("a2");
+            entity.Property(e => e.ModelId)
+                .HasColumnType("NVARCHAR(200)")
+                .HasColumnName("ModelID");
+            entity.Property(e => e.Sw).HasColumnType("INT");
+            entity.Property(e => e.Wlpu0)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu0");
+            entity.Property(e => e.Wlpu10)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu10");
+            entity.Property(e => e.Wlpu15)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu15");
+            entity.Property(e => e.Wlpu20)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu20");
+            entity.Property(e => e.Wlpu25)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu25");
+            entity.Property(e => e.Wlpu30)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu30");
+            entity.Property(e => e.Wlpu35)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu35");
+            entity.Property(e => e.Wlpu40)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu40");
+            entity.Property(e => e.Wlpu5)
+                .HasColumnType("DOUBLE")
+                .HasColumnName("WLPu5");
+        });
+
+        OnModelCreatingPartial(modelBuilder);
+    }
+
+    partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
+}
diff --git a/ErrorAnalysis.Repository/Entity/SigfarResultTable.cs b/ErrorAnalysis.Repository/Entity/SigfarResultTable.cs
new file mode 100644
index 0000000..fc825e2
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/SigfarResultTable.cs
@@ -0,0 +1,29 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class SigfarResultTable
+{
+    public string Id { get; set; } = null!;
+
+    public string ModelId { get; set; } = null!;
+
+    public int Porosity { get; set; }
+
+    public int? Sw { get; set; }
+
+    public string? InelasticSpec { get; set; }
+
+    public string? Capture1Spec { get; set; }
+
+    public string? Capture2Spec { get; set; }
+
+    public string? TimeSpec { get; set; }
+
+    public decimal? CinelasticSpec { get; set; }
+
+    public string? Ccapture1Spec { get; set; }
+
+    public string? Ccapture2Spec { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/SiglongResultTable.cs b/ErrorAnalysis.Repository/Entity/SiglongResultTable.cs
new file mode 100644
index 0000000..cd38b19
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/SiglongResultTable.cs
@@ -0,0 +1,23 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class SiglongResultTable
+{
+    public string Id { get; set; } = null!;
+
+    public string ModelId { get; set; } = null!;
+
+    public int Porosity { get; set; }
+
+    public int? Sw { get; set; }
+
+    public string? InelasticSpec { get; set; }
+
+    public string? Capture1Spec { get; set; }
+
+    public string? Capture2Spec { get; set; }
+
+    public string? TimeSpec { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/SigmodelTable.cs b/ErrorAnalysis.Repository/Entity/SigmodelTable.cs
new file mode 100644
index 0000000..5df2c9b
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/SigmodelTable.cs
@@ -0,0 +1,43 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class SigmodelTable
+{
+    public string ModelId { get; set; } = null!;
+
+    public string Bit { get; set; } = null!;
+
+    public string CasingOd { get; set; } = null!;
+
+    public string CasingId { get; set; } = null!;
+
+    public string? ScreenOd { get; set; }
+
+    public string? ScreenId { get; set; }
+
+    public string TubeOd { get; set; } = null!;
+
+    public string TubeId { get; set; } = null!;
+
+    public string Lithology { get; set; } = null!;
+
+    public string? Vsh { get; set; }
+
+    public string? OilDensity { get; set; }
+
+    public string? Bhsalinity { get; set; }
+
+    public string? ReservoirSalinity { get; set; }
+
+    public string? TubeFluid { get; set; }
+
+    public string? ScreenFluid { get; set; }
+
+    public string? CasingFluid { get; set; }
+
+    public string? CementBond { get; set; }
+
+    public string? GravelFillPercent { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/SignearResultTable.cs b/ErrorAnalysis.Repository/Entity/SignearResultTable.cs
new file mode 100644
index 0000000..7817086
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/SignearResultTable.cs
@@ -0,0 +1,23 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class SignearResultTable
+{
+    public string Id { get; set; } = null!;
+
+    public string ModelId { get; set; } = null!;
+
+    public int Porosity { get; set; }
+
+    public int? Sw { get; set; }
+
+    public string? InelasticSpec { get; set; }
+
+    public string? Capture1Spec { get; set; }
+
+    public string? Capture2Spec { get; set; }
+
+    public string? TimeSpec { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/Entity/Sigwoltable.cs b/ErrorAnalysis.Repository/Entity/Sigwoltable.cs
new file mode 100644
index 0000000..39f7fc4
--- /dev/null
+++ b/ErrorAnalysis.Repository/Entity/Sigwoltable.cs
@@ -0,0 +1,37 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace ErrorAnalysis.Repository.Entity;
+
+public partial class Sigwoltable
+{
+    public string Cowolid { get; set; } = null!;
+
+    public string ModelId { get; set; } = null!;
+
+    public int? Sw { get; set; }
+
+    public double? Wlpu0 { get; set; }
+
+    public double? Wlpu5 { get; set; }
+
+    public double? Wlpu10 { get; set; }
+
+    public double? Wlpu15 { get; set; }
+
+    public double? Wlpu20 { get; set; }
+
+    public double? Wlpu25 { get; set; }
+
+    public double? Wlpu30 { get; set; }
+
+    public double? Wlpu35 { get; set; }
+
+    public double? Wlpu40 { get; set; }
+
+    public double? A0 { get; set; }
+
+    public double? A1 { get; set; }
+
+    public double? A2 { get; set; }
+}
diff --git a/ErrorAnalysis.Repository/ErrorAnalysis.Repository.csproj b/ErrorAnalysis.Repository/ErrorAnalysis.Repository.csproj
new file mode 100644
index 0000000..97e4988
--- /dev/null
+++ b/ErrorAnalysis.Repository/ErrorAnalysis.Repository.csproj
@@ -0,0 +1,22 @@
+锘�<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net8.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.6" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.6">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    </PackageReference>
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.6" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.6">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    </PackageReference>
+  </ItemGroup>
+
+</Project>
diff --git a/ErrorAnalysis.Repository/RepositoryBase.cs b/ErrorAnalysis.Repository/RepositoryBase.cs
new file mode 100644
index 0000000..bfe0f28
--- /dev/null
+++ b/ErrorAnalysis.Repository/RepositoryBase.cs
@@ -0,0 +1,14 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ErrorAnalysis.Repository
+{
+    public class RepositoryBase
+    {
+        public readonly string _connectionString;
+        public RepositoryBase(string connectionString) => _connectionString = connectionString;
+    }
+}
diff --git a/ErrorAnalysis.Service/COMergeCalcService.cs b/ErrorAnalysis.Service/COMergeCalcService.cs
new file mode 100644
index 0000000..06861c2
--- /dev/null
+++ b/ErrorAnalysis.Service/COMergeCalcService.cs
@@ -0,0 +1,86 @@
+锘縰sing ErrorAnalysis.Repository;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ErrorAnalysis.Service
+{
+    public class COMergeCalcService
+    {
+        const double _gg = (9.0 - 0.0) / 255.0;//0.03529
+        const double _offset = 0.0;
+
+        const int _cWinStartIndex = (int)(3.3 / _gg + _offset); //C绐楀彛index
+        const int _cWinEndIndex = (int)(4.78 / _gg + _offset); // width= 4.78-3.3  = 1.48
+
+        const int _oWinStartIndex = (int)(4.88 / _gg + _offset); // org
+        const int _oWinEndIndex = (int)(6.36 / _gg + _offset); // width = 6.36-4.88=1.48
+
+        public static double GetFarMergeCResult(string connectionString, string modelId, int porosity)
+        {
+            var repository = new COFarResultRepository(connectionString);
+            var cResult = repository.GetCOFarResult(modelId, porosity, 0);
+            if (cResult == null)
+                throw new InvalidDataException("COFarResult not found");
+            var cArr = cResult.InelasticSpec?.Split(',').Select(v => Convert.ToDouble(v)).ToArray();
+            if (cArr == null)
+                throw new InvalidDataException("COFarResult InelasticSpec is null");
+
+            var length = _cWinEndIndex - _cWinStartIndex + 1;
+            var result = cArr.Skip(_cWinStartIndex).Take(length).Sum();
+
+            return result;
+        }
+
+        public static double GetFarMergeOResult(string connectionString, string modelId, int porosity)
+        {
+            var repository = new COFarResultRepository(connectionString);
+            var cResult = repository.GetCOFarResult(modelId, porosity, 100);
+            if (cResult == null)
+                throw new InvalidDataException("COFarResult not found");
+            var cArr = cResult.InelasticSpec?.Split(',').Select(v => Convert.ToDouble(v)).ToArray();
+            if (cArr == null)
+                throw new InvalidDataException("COFarResult InelasticSpec is null");
+
+            var length = _oWinEndIndex - _oWinStartIndex + 1;
+            var result = cArr.Skip(_oWinStartIndex).Take(length).Sum();
+
+            return result;
+        }
+
+        public static double GetNearMergeCResult(string connectionString, string modelId, int porosity)
+        {
+            var repository = new CONearResultRepository(connectionString);
+            var cResult = repository.GetCONearResult(modelId, porosity, 0);
+            if (cResult == null)
+                throw new InvalidDataException("CONearResult not found");
+            var cArr = cResult.InelasticSpec?.Split(',').Select(v => Convert.ToDouble(v)).ToArray();
+            if (cArr == null)
+                throw new InvalidDataException("CONearResult InelasticSpec is null");
+
+            var length = _cWinEndIndex - _cWinStartIndex + 1;
+            var result = cArr.Skip(_cWinStartIndex).Take(length).Sum();
+
+            return result;
+        }
+
+        public static double GetNearMergeOResult(string connectionString, string modelId, int porosity)
+        {
+            var repository = new CONearResultRepository(connectionString);
+            var cResult = repository.GetCONearResult(modelId, porosity, 100);
+            if (cResult == null)
+                throw new InvalidDataException("CONearResult not found");
+            var cArr = cResult.InelasticSpec?.Split(',').Select(v => Convert.ToDouble(v)).ToArray();
+            if (cArr == null)
+                throw new InvalidDataException("CONearResult InelasticSpec is null");
+
+            var length = _oWinEndIndex - _oWinStartIndex + 1;
+            var result = cArr.Skip(_oWinStartIndex).Take(length).Sum();
+
+            return result;
+        }
+
+    }
+}
diff --git a/ErrorAnalysis.Service/ErrorAnalysis.Service.csproj b/ErrorAnalysis.Service/ErrorAnalysis.Service.csproj
new file mode 100644
index 0000000..cfdea7f
--- /dev/null
+++ b/ErrorAnalysis.Service/ErrorAnalysis.Service.csproj
@@ -0,0 +1,13 @@
+锘�<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net8.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\ErrorAnalysis.Repository\ErrorAnalysis.Repository.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/ErrorAnalysis.Service/ErrorRatioCalc.cs b/ErrorAnalysis.Service/ErrorRatioCalc.cs
new file mode 100644
index 0000000..bde1691
--- /dev/null
+++ b/ErrorAnalysis.Service/ErrorRatioCalc.cs
@@ -0,0 +1,24 @@
+锘縰sing ErrorAnalysis.Repository;
+using ErrorAnalysis.Service.Model;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ErrorAnalysis.Service
+{
+    public class ErrorRatioCalc
+    {
+        public static ErrorRatioResult GetErrorRatioResult() { return new ErrorRatioResult(); }
+
+        private static ErrorRatio GetErrorRatio(string connectionString, string modelID, int porosity)
+        {
+            var coWOLRepository = new COWOLRepository(connectionString);
+            var cWolRes = coWOLRepository.GetWOL(modelID, 0);
+            var oWolRes = coWOLRepository.GetWOL(modelID, 100);
+            
+            return new ErrorRatio { };
+        }
+    }
+}
diff --git a/ErrorAnalysis.Service/Model/ErrorRatioModel.cs b/ErrorAnalysis.Service/Model/ErrorRatioModel.cs
new file mode 100644
index 0000000..7b99913
--- /dev/null
+++ b/ErrorAnalysis.Service/Model/ErrorRatioModel.cs
@@ -0,0 +1,22 @@
+锘縰sing ErrorAnalysis.Repository.Entity;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ErrorAnalysis.Service.Model
+{
+    public class ErrorRatioResult
+    {
+        public COModelTable? COModel { get; set; }
+        public List<ErrorRatio>? ErrorRatios { get; set; }
+    }
+
+    public class ErrorRatio
+    {
+        public int Porosity { get; set; }
+        public int Pass { get; set; }
+        public double ErrorRatioValue { get; set; }
+    }
+}
diff --git a/ErrorAnalysis.Service/PDEVCalcService.cs b/ErrorAnalysis.Service/PDEVCalcService.cs
new file mode 100644
index 0000000..a549385
--- /dev/null
+++ b/ErrorAnalysis.Service/PDEVCalcService.cs
@@ -0,0 +1,26 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ErrorAnalysis.Service
+{
+    public class PDEVCalcService
+    {
+        public static double GetMergePDEV(string connectionString, string modelId, int porosity)
+        {
+            var farC = COMergeCalcService.GetFarMergeCResult(connectionString, modelId, porosity);
+            var farO = COMergeCalcService.GetFarMergeOResult(connectionString, modelId, porosity);
+            var farPDEV = CalcPDEV(farC, farO);
+
+            var nearC = COMergeCalcService.GetNearMergeCResult(connectionString, modelId, porosity);
+            var nearO = COMergeCalcService.GetNearMergeOResult(connectionString, modelId, porosity);
+            var nearPDEV = CalcPDEV(nearC, nearO);
+
+            return nearPDEV * 0.65 + farPDEV * 0.35;
+        }
+
+        private static double CalcPDEV(double c, double o) => Math.Sqrt(Math.Pow(c / o, 2) * (1 / c + 1 / o));
+    }
+}
diff --git a/ErrorAnalysis.UI/ErrorAnalysis.UI.csproj b/ErrorAnalysis.UI/ErrorAnalysis.UI.csproj
new file mode 100644
index 0000000..f0300e5
--- /dev/null
+++ b/ErrorAnalysis.UI/ErrorAnalysis.UI.csproj
@@ -0,0 +1,16 @@
+锘�<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>WinExe</OutputType>
+    <TargetFramework>net8.0-windows</TargetFramework>
+    <Nullable>enable</Nullable>
+    <UseWindowsForms>true</UseWindowsForms>
+    <ImplicitUsings>enable</ImplicitUsings>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\ErrorAnalysis.Repository\ErrorAnalysis.Repository.csproj" />
+    <ProjectReference Include="..\ErrorAnalysis.Service\ErrorAnalysis.Service.csproj" />
+  </ItemGroup>
+
+</Project>
\ No newline at end of file
diff --git a/ErrorAnalysis.UI/Form1.Designer.cs b/ErrorAnalysis.UI/Form1.Designer.cs
new file mode 100644
index 0000000..b9757cc
--- /dev/null
+++ b/ErrorAnalysis.UI/Form1.Designer.cs
@@ -0,0 +1,59 @@
+锘縩amespace ErrorAnalysis.UI
+{
+    partial class Form1
+    {
+        /// <summary>
+        ///  Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        ///  Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        ///  Required method for Designer support - do not modify
+        ///  the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            btnGetAllPipe = new Button();
+            SuspendLayout();
+            // 
+            // btnGetAllPipe
+            // 
+            btnGetAllPipe.Location = new Point(642, 344);
+            btnGetAllPipe.Name = "btnGetAllPipe";
+            btnGetAllPipe.Size = new Size(75, 23);
+            btnGetAllPipe.TabIndex = 0;
+            btnGetAllPipe.Text = "button1";
+            btnGetAllPipe.UseVisualStyleBackColor = true;
+            btnGetAllPipe.Click += btnGetAllPipe_Click;
+            // 
+            // Form1
+            // 
+            AutoScaleDimensions = new SizeF(7F, 17F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(800, 450);
+            Controls.Add(btnGetAllPipe);
+            Name = "Form1";
+            Text = "Form1";
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private Button btnGetAllPipe;
+    }
+}
diff --git a/ErrorAnalysis.UI/Form1.cs b/ErrorAnalysis.UI/Form1.cs
new file mode 100644
index 0000000..75baf36
--- /dev/null
+++ b/ErrorAnalysis.UI/Form1.cs
@@ -0,0 +1,21 @@
+using ErrorAnalysis.Repository;
+
+namespace ErrorAnalysis.UI
+{
+    public partial class Form1 : Form
+    {
+        public Form1()
+        {
+            InitializeComponent();
+        }
+
+        private void btnGetAllPipe_Click(object sender, EventArgs e)
+        {
+            var connectionString = "Data Source=D:\\Pro\\cosl\\ErrorRate\\RetMcnpDB.db";
+            var modelRepository = new COModelRepository(connectionString);
+            var models = modelRepository.GetCOModels();
+
+            
+        }
+    }
+}
diff --git a/ErrorAnalysis/Properties/Resources.resx b/ErrorAnalysis.UI/Form1.resx
similarity index 84%
rename from ErrorAnalysis/Properties/Resources.resx
rename to ErrorAnalysis.UI/Form1.resx
index af7dbeb..af32865 100644
--- a/ErrorAnalysis/Properties/Resources.resx
+++ b/ErrorAnalysis.UI/Form1.resx
@@ -1,17 +1,17 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
 <root>
-  <!-- 
+  <!--
     Microsoft ResX Schema 
-    
+
     Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
     associated with the data types.
-    
+
     Example:
-    
+
     ... ado.net/XML headers & schema ...
     <resheader name="resmimetype">text/microsoft-resx</resheader>
     <resheader name="version">2.0</resheader>
@@ -26,40 +26,41 @@
         <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
         <comment>This is a comment</comment>
     </data>
-                
-    There are any number of "resheader" rows that contain simple 
+
+    There are any number of "resheader" rows that contain simple
     name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
     mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
     extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
     read any of the formats listed below.
-    
+
     mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Serialization.Formatters.Binary.BinaryFormatter
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
             : and then encoded with base64 encoding.
     
     mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
+    value   : The object must be serialized with
             : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
             : and then encoded with base64 encoding.
 
     mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
+    value   : The object must be serialized into a byte array
             : using a System.ComponentModel.TypeConverter
             : and then encoded with base64 encoding.
     -->
   <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
@@ -68,9 +69,10 @@
               <xsd:sequence>
                 <xsd:element name="value" type="xsd:string" minOccurs="0" />
               </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="name" use="required" type="xsd:string" />
               <xsd:attribute name="type" type="xsd:string" />
               <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
             </xsd:complexType>
           </xsd:element>
           <xsd:element name="assembly">
@@ -85,9 +87,10 @@
                 <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                 <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
               </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
               <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
               <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
             </xsd:complexType>
           </xsd:element>
           <xsd:element name="resheader">
@@ -109,9 +112,9 @@
     <value>2.0</value>
   </resheader>
   <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
   <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
 </root>
\ No newline at end of file
diff --git a/ErrorAnalysis.UI/Program.cs b/ErrorAnalysis.UI/Program.cs
new file mode 100644
index 0000000..10b767a
--- /dev/null
+++ b/ErrorAnalysis.UI/Program.cs
@@ -0,0 +1,17 @@
+namespace ErrorAnalysis.UI
+{
+    internal static class Program
+    {
+        /// <summary>
+        ///  The main entry point for the application.
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            // To customize application configuration such as set high DPI settings or default font,
+            // see https://aka.ms/applicationconfiguration.
+            ApplicationConfiguration.Initialize();
+            Application.Run(new Form1());
+        }
+    }
+}
\ No newline at end of file
diff --git a/ErrorAnalysis.sln b/ErrorAnalysis.sln
index b3e561e..40772b7 100644
--- a/ErrorAnalysis.sln
+++ b/ErrorAnalysis.sln
@@ -3,7 +3,11 @@
 # Visual Studio Version 17
 VisualStudioVersion = 17.10.35027.167
 MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ErrorAnalysis", "ErrorAnalysis\ErrorAnalysis.csproj", "{843570BC-C1C7-4CBB-895E-D45D968BFF26}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ErrorAnalysis.UI", "ErrorAnalysis.UI\ErrorAnalysis.UI.csproj", "{D3AA890E-A643-49CE-A8BF-C0C3EDF7EBDD}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ErrorAnalysis.Repository", "ErrorAnalysis.Repository\ErrorAnalysis.Repository.csproj", "{CE9FBF0C-2B9F-4503-B009-B5A5BB30D2DE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ErrorAnalysis.Service", "ErrorAnalysis.Service\ErrorAnalysis.Service.csproj", "{51D61B80-C544-45D8-8C8A-44C1E8C7413A}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -11,10 +15,18 @@
 		Release|Any CPU = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{843570BC-C1C7-4CBB-895E-D45D968BFF26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{843570BC-C1C7-4CBB-895E-D45D968BFF26}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{843570BC-C1C7-4CBB-895E-D45D968BFF26}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{843570BC-C1C7-4CBB-895E-D45D968BFF26}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D3AA890E-A643-49CE-A8BF-C0C3EDF7EBDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D3AA890E-A643-49CE-A8BF-C0C3EDF7EBDD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D3AA890E-A643-49CE-A8BF-C0C3EDF7EBDD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D3AA890E-A643-49CE-A8BF-C0C3EDF7EBDD}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CE9FBF0C-2B9F-4503-B009-B5A5BB30D2DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{CE9FBF0C-2B9F-4503-B009-B5A5BB30D2DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{CE9FBF0C-2B9F-4503-B009-B5A5BB30D2DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{CE9FBF0C-2B9F-4503-B009-B5A5BB30D2DE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{51D61B80-C544-45D8-8C8A-44C1E8C7413A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{51D61B80-C544-45D8-8C8A-44C1E8C7413A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{51D61B80-C544-45D8-8C8A-44C1E8C7413A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{51D61B80-C544-45D8-8C8A-44C1E8C7413A}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/ErrorAnalysis/App.config b/ErrorAnalysis/App.config
deleted file mode 100644
index 193aecc..0000000
--- a/ErrorAnalysis/App.config
+++ /dev/null
@@ -1,6 +0,0 @@
-锘�<?xml version="1.0" encoding="utf-8" ?>
-<configuration>
-    <startup> 
-        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
-    </startup>
-</configuration>
\ No newline at end of file
diff --git a/ErrorAnalysis/ErrorAnalysis.csproj b/ErrorAnalysis/ErrorAnalysis.csproj
deleted file mode 100644
index a37cb65..0000000
--- a/ErrorAnalysis/ErrorAnalysis.csproj
+++ /dev/null
@@ -1,74 +0,0 @@
-锘�<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{843570BC-C1C7-4CBB-895E-D45D968BFF26}</ProjectGuid>
-    <OutputType>WinExe</OutputType>
-    <RootNamespace>ErrorAnalysis</RootNamespace>
-    <AssemblyName>ErrorAnalysis</AssemblyName>
-    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <Deterministic>true</Deterministic>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <PlatformTarget>AnyCPU</PlatformTarget>
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <PlatformTarget>AnyCPU</PlatformTarget>
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Xml.Linq" />
-    <Reference Include="System.Data.DataSetExtensions" />
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Deployment" />
-    <Reference Include="System.Drawing" />
-    <Reference Include="System.Net.Http" />
-    <Reference Include="System.Windows.Forms" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Program.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <EmbeddedResource Include="Properties\Resources.resx">
-      <Generator>ResXFileCodeGenerator</Generator>
-      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <Compile Include="Properties\Resources.Designer.cs">
-      <AutoGen>True</AutoGen>
-      <DependentUpon>Resources.resx</DependentUpon>
-    </Compile>
-    <None Include="Properties\Settings.settings">
-      <Generator>SettingsSingleFileGenerator</Generator>
-      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
-    </None>
-    <Compile Include="Properties\Settings.Designer.cs">
-      <AutoGen>True</AutoGen>
-      <DependentUpon>Settings.settings</DependentUpon>
-      <DesignTimeSharedInput>True</DesignTimeSharedInput>
-    </Compile>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="App.config" />
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-</Project>
\ No newline at end of file
diff --git a/ErrorAnalysis/Program.cs b/ErrorAnalysis/Program.cs
deleted file mode 100644
index 6706991..0000000
--- a/ErrorAnalysis/Program.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace ErrorAnalysis
-{
-    internal static class Program
-    {
-        /// <summary>
-        /// 搴旂敤绋嬪簭鐨勪富鍏ュ彛鐐广��
-        /// </summary>
-        [STAThread]
-        static void Main()
-        {
-            Application.EnableVisualStyles();
-            Application.SetCompatibleTextRenderingDefault(false);
-            Application.Run(new Form1());
-        }
-    }
-}
diff --git a/ErrorAnalysis/Properties/AssemblyInfo.cs b/ErrorAnalysis/Properties/AssemblyInfo.cs
deleted file mode 100644
index 173eda5..0000000
--- a/ErrorAnalysis/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-锘縰sing System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
-// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
-// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
-[assembly: AssemblyTitle("ErrorAnalysis")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("ErrorAnalysis")]
-[assembly: AssemblyCopyright("Copyright 漏  2025")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
-//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
-//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
-[assembly: ComVisible(false)]
-
-// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
-[assembly: Guid("843570bc-c1c7-4cbb-895e-d45d968bff26")]
-
-// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
-//
-//      涓荤増鏈�
-//      娆$増鏈�
-//      鐢熸垚鍙�
-//      淇鍙�
-//
-//鍙互鎸囧畾鎵�鏈夎繖浜涘�硷紝涔熷彲浠ヤ娇鐢ㄢ�滅敓鎴愬彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊�
-//閫氳繃浣跨敤 "*"锛屽涓嬫墍绀�:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/ErrorAnalysis/Properties/Resources.Designer.cs b/ErrorAnalysis/Properties/Resources.Designer.cs
deleted file mode 100644
index bff6f2a..0000000
--- a/ErrorAnalysis/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-锘�//------------------------------------------------------------------------------
-// <auto-generated>
-//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
-//     杩愯鏃剁増鏈�: 4.0.30319.42000
-//
-//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳藉鑷翠笉姝g‘鐨勮涓猴紝濡傛灉
-//     閲嶆柊鐢熸垚浠g爜锛屽垯鎵�鍋氭洿鏀瑰皢涓㈠け銆�
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace ErrorAnalysis.Properties
-{
-
-
-    /// <summary>
-    ///   寮虹被鍨嬭祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲瀛楃涓茬瓑銆�
-    /// </summary>
-    // 姝ょ被鏄敱 StronglyTypedResourceBuilder
-    // 绫婚�氳繃绫讳技浜� ResGen 鎴� Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆�
-    // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈� .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛� ResGen
-    // (浠� /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆�
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    internal class Resources
-    {
-
-        private static global::System.Resources.ResourceManager resourceMan;
-
-        private static global::System.Globalization.CultureInfo resourceCulture;
-
-        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-        internal Resources()
-        {
-        }
-
-        /// <summary>
-        ///   杩斿洖姝ょ被浣跨敤鐨勭紦瀛� ResourceManager 瀹炰緥銆�
-        /// </summary>
-        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
-        internal static global::System.Resources.ResourceManager ResourceManager
-        {
-            get
-            {
-                if ((resourceMan == null))
-                {
-                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ErrorAnalysis.Properties.Resources", typeof(Resources).Assembly);
-                    resourceMan = temp;
-                }
-                return resourceMan;
-            }
-        }
-
-        /// <summary>
-        ///   閲嶅啓褰撳墠绾跨▼鐨� CurrentUICulture 灞炴�э紝瀵�
-        ///   浣跨敤姝ゅ己绫诲瀷璧勬簮绫荤殑鎵�鏈夎祫婧愭煡鎵炬墽琛岄噸鍐欍��
-        /// </summary>
-        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
-        internal static global::System.Globalization.CultureInfo Culture
-        {
-            get
-            {
-                return resourceCulture;
-            }
-            set
-            {
-                resourceCulture = value;
-            }
-        }
-    }
-}
diff --git a/ErrorAnalysis/Properties/Settings.Designer.cs b/ErrorAnalysis/Properties/Settings.Designer.cs
deleted file mode 100644
index bee59ee..0000000
--- a/ErrorAnalysis/Properties/Settings.Designer.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-锘�//------------------------------------------------------------------------------
-// <auto-generated>
-//     This code was generated by a tool.
-//     Runtime Version:4.0.30319.42000
-//
-//     Changes to this file may cause incorrect behavior and will be lost if
-//     the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace ErrorAnalysis.Properties
-{
-
-
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
-    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
-    {
-
-        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
-        public static Settings Default
-        {
-            get
-            {
-                return defaultInstance;
-            }
-        }
-    }
-}
diff --git a/ErrorAnalysis/Properties/Settings.settings b/ErrorAnalysis/Properties/Settings.settings
deleted file mode 100644
index 3964565..0000000
--- a/ErrorAnalysis/Properties/Settings.settings
+++ /dev/null
@@ -1,7 +0,0 @@
-锘�<?xml version='1.0' encoding='utf-8'?>
-<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
-  <Profiles>
-    <Profile Name="(Default)" />
-  </Profiles>
-  <Settings />
-</SettingsFile>

--
Gitblit v1.9.3