Skip to content

Commit

Permalink
[fix] 检查该名字是否已存在,可能两个字段名差异只是多了个下划线。NewLifeX/XCoder#10
Browse files Browse the repository at this point in the history
  • Loading branch information
nnhy committed Mar 7, 2024
1 parent 46202a0 commit a1520d3
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 13 deletions.
13 changes: 11 additions & 2 deletions XCode/DataAccessLayer/Model/IModelResolver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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"));
}


Expand All @@ -289,7 +289,16 @@ public virtual IDataTable Fix(IDataTable table)
/// <param name="column"></param>
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;
}
Expand Down
35 changes: 24 additions & 11 deletions XCode/DataAccessLayer/Model/ModelHelper.cs
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -569,41 +570,53 @@ 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();

// 剩余特性作为扩展属性
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());
}
Expand Down

0 comments on commit a1520d3

Please sign in to comment.