diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index bdd16ff9..da7ace6b 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -538,14 +538,5 @@
-
-
- 批量注入 Repository,可以参考代码自行调整
-
-
-
-
-
-
diff --git a/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests.cs b/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests.cs
index 71177284..00eba288 100644
--- a/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests.cs
+++ b/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests.cs
@@ -593,6 +593,55 @@ namespace FreeSql.Tests
public Guid Id { get; set; }
public string Name { get; set; }
}
+ [Fact]
+ public void BeginEditIdentity()
+ {
+ g.sqlite.Delete().Where("1=1").ExecuteAffrows();
+ var repo = g.sqlite.GetRepository();
+ var cts = new[] {
+ new BeginEdit02 { Name = "1" },
+ new BeginEdit02 { Name = "1_1" },
+ new BeginEdit02 { Name = "1_2" },
+ new BeginEdit02 { Name = "1_3" },
+ new BeginEdit02 { Name = "2" },
+ new BeginEdit02 { Name = "2_1" },
+ new BeginEdit02 { Name = "2_2" }
+ }.ToList();
+ repo.Insert(cts);
+
+ repo.BeginEdit(cts);
+
+ cts.Add(new BeginEdit02 { Name = "2_3" });
+ cts[0].Name = "123123";
+ cts.RemoveAt(1);
+
+ Assert.Equal(3, repo.EndEdit());
+
+ g.sqlite.Delete().Where("1=1").ExecuteAffrows();
+ repo = g.sqlite.GetRepository();
+ cts = repo.Select.ToList();
+ repo.BeginEdit(cts);
+
+ cts.AddRange(new[] {
+ new BeginEdit02 { Name = "1" },
+ new BeginEdit02 { Name = "1_1" },
+ new BeginEdit02 { Name = "1_2" },
+ new BeginEdit02 { Name = "1_3" },
+ new BeginEdit02 { Name = "2" },
+ new BeginEdit02 { Name = "2_1" },
+ new BeginEdit02 { Name = "2_2" }
+ });
+
+ Assert.Equal(7, repo.EndEdit());
+ }
+ class BeginEdit02
+ {
+ [Column(IsIdentity = true)]
+ public int Id { get; set; }
+ public string Name { get; set; }
+ [Column(ServerTime = DateTimeKind.Utc)]
+ public DateTime UpdateTime { get; set; }
+ }
[Fact]
public void OrmScoped()
diff --git a/FreeSql/Extensions/EntityUtilExtensions.cs b/FreeSql/Extensions/EntityUtilExtensions.cs
index 97732054..b19f1316 100644
--- a/FreeSql/Extensions/EntityUtilExtensions.cs
+++ b/FreeSql/Extensions/EntityUtilExtensions.cs
@@ -604,7 +604,15 @@ namespace FreeSql.Extensions.EntityUtil
exps.Add(Expression.Label(returnTarget, Expression.Constant(new string[0])));
return Expression.Lambda>(Expression.Block(new[] { var1Ret, var1Parm, var2Parm }, exps), new[] { parm1, parm2, parm3 }).Compile();
});
- return func(entity1, entity2, isEqual);
+ var result = func(entity1, entity2, isEqual);
+ var tmptb = orm.CodeFirst.GetTableByEntity(entityType);
+ if (tmptb.ColumnsByCanUpdateDbUpdateValue.Length > 0) {
+ if (isEqual && result.Length + tmptb.ColumnsByCanUpdateDbUpdateValue.Length == tmptb.ColumnsByCs.Count)
+ return result.Concat(tmptb.ColumnsByCanUpdateDbUpdateValue.Select(a => a.Attribute.Name)).ToArray();
+ if (!isEqual && result.Length == tmptb.ColumnsByCanUpdateDbUpdateValue.Length)
+ return new string[0];
+ }
+ return result;
}
static ConcurrentDictionary>> _dicSetEntityIncrByWithPropertyName = new ConcurrentDictionary>>();
diff --git a/FreeSql/Internal/Model/TableInfo.cs b/FreeSql/Internal/Model/TableInfo.cs
index c09484ef..7de85216 100644
--- a/FreeSql/Internal/Model/TableInfo.cs
+++ b/FreeSql/Internal/Model/TableInfo.cs
@@ -17,6 +17,7 @@ namespace FreeSql.Internal.Model
public Dictionary ColumnsByCs { get; set; } = new Dictionary(StringComparer.CurrentCultureIgnoreCase);
public Dictionary ColumnsByCsIgnore { get; set; } = new Dictionary(StringComparer.CurrentCultureIgnoreCase);
public ColumnInfo[] ColumnsByPosition { get; set; }
+ public ColumnInfo[] ColumnsByCanUpdateDbUpdateValue { get; set; }
public ColumnInfo[] Primarys { get; set; }
public IndexInfo[] Indexes { get; set; }
public string CsName { get; set; }
diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs
index 72a03c23..08fc5aff 100644
--- a/FreeSql/Internal/UtilsExpressionTree.cs
+++ b/FreeSql/Internal/UtilsExpressionTree.cs
@@ -484,6 +484,7 @@ namespace FreeSql.Internal
trytb.ColumnsByPosition = columnsList.Where(a => a.Attribute.Position > 0).OrderBy(a => a.Attribute.Position)
.Concat(columnsList.Where(a => a.Attribute.Position == 0))
.Concat(columnsList.Where(a => a.Attribute.Position < 0).OrderBy(a => a.Attribute.Position)).ToArray();
+ trytb.ColumnsByCanUpdateDbUpdateValue = columnsList.Where(a => a.Attribute.CanUpdate == true && string.IsNullOrEmpty(a.DbUpdateValue) == false).ToArray();
trytb.Primarys = trytb.Columns.Values.Where(a => a.Attribute.IsPrimary == true).ToArray();
if (trytb.Primarys.Any() == false)