From a1520d3b4d4e9e0c67cee06ec1c0b2b4e2527fc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=9F=B3=E5=A4=B4?= Date: Thu, 7 Mar 2024 20:11:25 +0800 Subject: [PATCH] =?UTF-8?q?[fix]=20=E6=A3=80=E6=9F=A5=E8=AF=A5=E5=90=8D?= =?UTF-8?q?=E5=AD=97=E6=98=AF=E5=90=A6=E5=B7=B2=E5=AD=98=E5=9C=A8=EF=BC=8C?= =?UTF-8?q?=E5=8F=AF=E8=83=BD=E4=B8=A4=E4=B8=AA=E5=AD=97=E6=AE=B5=E5=90=8D?= =?UTF-8?q?=E5=B7=AE=E5=BC=82=E5=8F=AA=E6=98=AF=E5=A4=9A=E4=BA=86=E4=B8=AA?= =?UTF-8?q?=E4=B8=8B=E5=88=92=E7=BA=BF=E3=80=82https://github.com/NewLifeX?= =?UTF-8?q?/XCoder/issues/10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- XCode/DataAccessLayer/Model/IModelResolver.cs | 13 +++++-- XCode/DataAccessLayer/Model/ModelHelper.cs | 35 +++++++++++++------ 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/XCode/DataAccessLayer/Model/IModelResolver.cs b/XCode/DataAccessLayer/Model/IModelResolver.cs index cafe2ed31..8ba4238ae 100755 --- a/XCode/DataAccessLayer/Model/IModelResolver.cs +++ b/XCode/DataAccessLayer/Model/IModelResolver.cs @@ -278,7 +278,7 @@ public virtual IDataTable Fix(IDataTable table) // 去除外键 if (table.Columns.Any()) { - table.Columns.RemoveAll(e => e.RawType.EqualIgnoreCase("KEY","K")); + table.Columns.RemoveAll(e => e.RawType.EqualIgnoreCase("KEY", "K")); } @@ -289,7 +289,16 @@ public virtual IDataTable Fix(IDataTable table) /// public virtual IDataColumn Fix(IDataColumn column) { - if (column.Name.IsNullOrEmpty()) column.Name = GetName(column.ColumnName); + if (column.Name.IsNullOrEmpty()) + { + var name = GetName(column.ColumnName); + + // 检查该名字是否已存在,可能两个字段名差异只是多了个下划线 + if (column.Table == null || !column.Table.Columns.Any(e => e.Name.EqualIgnoreCase(name))) + column.Name = name; + else + column.Name = column.Name; + } return column; } diff --git a/XCode/DataAccessLayer/Model/ModelHelper.cs b/XCode/DataAccessLayer/Model/ModelHelper.cs index 1283d9a47..971bdc9bc 100644 --- a/XCode/DataAccessLayer/Model/ModelHelper.cs +++ b/XCode/DataAccessLayer/Model/ModelHelper.cs @@ -1,6 +1,7 @@ using System.Collections; using System.Collections.Concurrent; using System.Data; +using System.Data.Common; using System.Reflection; using System.Runtime.Serialization; using System.Text; @@ -569,26 +570,29 @@ public static void ReadXmlAttribute(XmlReader reader, Object value) if (pi1 != null && pi2 != null) { // 写入的时候省略了相同的TableName/ColumnName - var v2 = (String)value.GetValue(pi2); + var v2 = (String?)value.GetValue(pi2); if (String.IsNullOrEmpty(v2)) { value.SetValue(pi2, value.GetValue(pi1)); } } // 自增字段非空 - if (value is IDataColumn) + if (value is IDataColumn dc) { - var dc = value as IDataColumn; if (dc.Identity) dc.Nullable = false; // 优化字段名 //dc.Fix(); - if (dc.Name.IsNullOrEmpty()) - dc.Name = ModelResolver.Current.GetName(dc.ColumnName); - else if (dc.ColumnName.IsNullOrEmpty() || dc.ColumnName == dc.Name) + if (dc.ColumnName.IsNullOrEmpty()) dc.ColumnName = dc.Name; + if (dc.Name.IsNullOrEmpty() || dc.ColumnName == dc.Name) { - dc.ColumnName = dc.Name; - dc.Name = ModelResolver.Current.GetName(dc.ColumnName); + var name = ModelResolver.Current.GetName(dc.ColumnName); + + // 检查该名字是否已存在,可能两个字段名差异只是多了个下划线 + if (dc.Table == null || !dc.Table.Columns.Any(e => e.Name.EqualIgnoreCase(name))) + dc.Name = name; + else + dc.Name = dc.Name; } } //reader.Skip(); @@ -596,14 +600,23 @@ public static void ReadXmlAttribute(XmlReader reader, Object value) // 剩余特性作为扩展属性 if (reader.MoveToFirstAttribute()) { - if (value is IDataTable or IDataColumn) + if (value is IDataTable dt) + { + do + { + if (!names.Contains(reader.Name)) + { + dt.Properties[reader.Name] = reader.Value; + } + } while (reader.MoveToNextAttribute()); + } + else if (value is IDataColumn dc3) { - var dic = (value is IDataTable) ? (value as IDataTable).Properties : (value as IDataColumn).Properties; do { if (!names.Contains(reader.Name)) { - dic[reader.Name] = reader.Value; + dc3.Properties[reader.Name] = reader.Value; } } while (reader.MoveToNextAttribute()); }