From 704e59bf218bd7d875f6cf2609fa1919ef35acab Mon Sep 17 00:00:00 2001
From: 28810 <28810@YEXIANGQIN>
Date: Mon, 14 Sep 2020 11:33:20 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20FreeSql.DbContext=20?=
=?UTF-8?q?=E5=AF=B9=E5=90=8C=E4=B8=80=E5=AE=9E=E4=BD=93=E9=87=8D=E5=A4=8D?=
=?UTF-8?q?=20Update=EF=BC=8C=E7=AC=AC=E4=BA=8C=E6=AC=A1=E6=97=A0=E6=95=88?=
=?UTF-8?q?=E7=9A=84=20Bug=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FreeSql.DbContext/DbSet/DbSetAsync.cs | 11 +++++++++
FreeSql.DbContext/DbSet/DbSetSync.cs | 11 +++++++++
FreeSql.DbContext/FreeSql.DbContext.xml | 23 ++++---------------
.../Firebird/FirebirdDbFirstTest.cs | 5 ++++
4 files changed, 31 insertions(+), 19 deletions(-)
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));