diff --git a/FreeSql.DbContext/DbSet/DbSetAsync.cs b/FreeSql.DbContext/DbSet/DbSetAsync.cs index 1c2fa9aa..b75f3fb4 100644 --- a/FreeSql.DbContext/DbSet/DbSetAsync.cs +++ b/FreeSql.DbContext/DbSet/DbSetAsync.cs @@ -408,7 +408,18 @@ namespace FreeSql foreach (var item in data) { if (_dicUpdateTimes.ContainsKey(item)) + { + var itemCopy = CreateEntityState(item).Value; await DbContextFlushCommandAsync(); + if (_table.VersionColumn != null) + { + var itemVersion = _db.OrmOriginal.GetEntityValueWithPropertyName(_entityType, item, _table.VersionColumn.CsName); + _db.OrmOriginal.MapEntityValue(_entityType, itemCopy, item); + _db.OrmOriginal.SetEntityValueWithPropertyName(_entityType, item, _table.VersionColumn.CsName, itemVersion); + } + else + _db.OrmOriginal.MapEntityValue(_entityType, itemCopy, item); + } _dicUpdateTimes.Add(item, 1); var state = CreateEntityState(item); diff --git a/FreeSql.DbContext/DbSet/DbSetSync.cs b/FreeSql.DbContext/DbSet/DbSetSync.cs index 59e173a3..7932c65c 100644 --- a/FreeSql.DbContext/DbSet/DbSetSync.cs +++ b/FreeSql.DbContext/DbSet/DbSetSync.cs @@ -451,7 +451,18 @@ namespace FreeSql foreach (var item in data) { if (_dicUpdateTimes.ContainsKey(item)) + { + var itemCopy = CreateEntityState(item).Value; DbContextFlushCommand(); + if (_table.VersionColumn != null) + { + var itemVersion = _db.OrmOriginal.GetEntityValueWithPropertyName(_entityType, item, _table.VersionColumn.CsName); + _db.OrmOriginal.MapEntityValue(_entityType, itemCopy, item); + _db.OrmOriginal.SetEntityValueWithPropertyName(_entityType, item, _table.VersionColumn.CsName, itemVersion); + } + else + _db.OrmOriginal.MapEntityValue(_entityType, itemCopy, item); + } _dicUpdateTimes.Add(item, 1); var state = CreateEntityState(item); diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 8cc83aba..9c6cd88b 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -329,7 +329,10 @@ - 开始编辑数据,然后调用方法 EndEdit 分析出添加方法只支持单表操作,不支持导航属性级联保存 + 开始编辑数据,然后调用方法 EndEdit 分析出添加、修改、删除 SQL 语句进行执行 + 场景:winform 加载表数据后,一顿添加、修改、删除操作之后,最后才点击【保存】 + 示例:https://github.com/dotnetcore/FreeSql/issues/397 + 注意:* 本方法只支持单表操作,不支持导航属性级联保存 @@ -531,21 +534,3 @@ -me="M:FreeSqlDbContextExtensions.CreateUnitOfWork(IFreeSql)"> - - 创建基于仓储功能的工作单元,务必使用 using 包含使用 - - - - - - - 批量注入 Repository,可以参考代码自行调整 - - - - - - - - diff --git a/FreeSql.Tests/FreeSql.Tests/Firebird/FirebirdDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/Firebird/FirebirdDbFirstTest.cs index d927e0d1..8dfb7b9f 100644 --- a/FreeSql.Tests/FreeSql.Tests/Firebird/FirebirdDbFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Firebird/FirebirdDbFirstTest.cs @@ -36,6 +36,11 @@ namespace FreeSql.Tests.Firebird public void ExistsTable() { var fsql = g.firebird; + try + { + fsql.Ado.ExecuteNonQuery("drop table test_existstb011"); + } + catch { } Assert.False(fsql.DbFirst.ExistsTable("test_existstb011")); Assert.False(fsql.DbFirst.ExistsTable("test_existstb011", false)); fsql.CodeFirst.SyncStructure(typeof(test_existstb011));