From dfac9434959993806afdecbd93bef925a443cba3 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Wed, 5 Aug 2020 13:43:49 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=AE=8C=E5=96=84=20DbContext/UnitOfWork?= =?UTF-8?q?=20EntityChange=20=E6=9B=B4=E6=96=B0=E5=AF=B9=E8=B1=A1=E4=B9=8B?= =?UTF-8?q?=E5=89=8D=E7=9A=84=E5=80=BC=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/DbContext/DbContext.cs | 4 ++++ FreeSql.DbContext/DbSet/DbSetAsync.cs | 11 ++++++----- FreeSql.DbContext/DbSet/DbSetSync.cs | 12 +++++++----- FreeSql.DbContext/FreeSql.DbContext.xml | 5 +++++ FreeSql.DbContext/readme.md | 2 +- FreeSql.Repository/readme.md | 2 +- 6 files changed, 24 insertions(+), 12 deletions(-) diff --git a/FreeSql.DbContext/DbContext/DbContext.cs b/FreeSql.DbContext/DbContext/DbContext.cs index be8eb704..dedde15f 100644 --- a/FreeSql.DbContext/DbContext/DbContext.cs +++ b/FreeSql.DbContext/DbContext/DbContext.cs @@ -243,6 +243,10 @@ namespace FreeSql public class ChangeInfo { public object Object { get; set; } + /// + /// Type = Update 的时候,获取更新之前的对象 + /// + public object BeforeObject { get; set; } public EntityChangeType Type { get; set; } } /// diff --git a/FreeSql.DbContext/DbSet/DbSetAsync.cs b/FreeSql.DbContext/DbSet/DbSetAsync.cs index aefaa719..0c602322 100644 --- a/FreeSql.DbContext/DbSet/DbSetAsync.cs +++ b/FreeSql.DbContext/DbSet/DbSetAsync.cs @@ -363,15 +363,16 @@ namespace FreeSql if (data?.Count > 0) { - if (cuig.Length == _table.Columns.Count) return ups.Length == data.Count ? -998 : -997; - var updateSource = data.Select(a => a.Value).ToArray(); - var update = this.OrmUpdate(null).SetSource(updateSource).IgnoreColumns(cuig); - + var update = this.OrmUpdate(null).SetSource(data.Select(a => a.Value)).IgnoreColumns(cuig); var affrows = await update.ExecuteAffrowsAsync(); - _db._entityChangeReport.AddRange(updateSource.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a, Type = DbContext.EntityChangeType.Update })); + _db._entityChangeReport.AddRange(data.Select(a => new DbContext.EntityChangeReport.ChangeInfo { + Object = a.Value, + BeforeObject = _states.TryGetValue(a.Key, out var beforeVal) ? beforeVal.Value : null, + Type = DbContext.EntityChangeType.Update + })); foreach (var newval in data) { diff --git a/FreeSql.DbContext/DbSet/DbSetSync.cs b/FreeSql.DbContext/DbSet/DbSetSync.cs index 2377a59c..dd260438 100644 --- a/FreeSql.DbContext/DbSet/DbSetSync.cs +++ b/FreeSql.DbContext/DbSet/DbSetSync.cs @@ -399,15 +399,17 @@ namespace FreeSql if (data?.Count > 0) { - if (cuig.Length == _table.Columns.Count) return ups.Length == data.Count ? -998 : -997; - var updateSource = data.Select(a => a.Value).ToArray(); - var update = this.OrmUpdate(null).SetSource(updateSource).IgnoreColumns(cuig); - + var update = this.OrmUpdate(null).SetSource(data.Select(a => a.Value)).IgnoreColumns(cuig); var affrows = update.ExecuteAffrows(); - _db._entityChangeReport.AddRange(updateSource.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a, Type = DbContext.EntityChangeType.Update })); + _db._entityChangeReport.AddRange(data.Select(a => new DbContext.EntityChangeReport.ChangeInfo + { + Object = a.Value, + BeforeObject = _states.TryGetValue(a.Key, out var beforeVal) ? beforeVal.Value : null, + Type = DbContext.EntityChangeType.Update + })); foreach (var newval in data) { diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index e54cbf74..2acb6679 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -57,6 +57,11 @@ + + + Type = Update 的时候,获取更新之前的对象 + + 实体变化记录 diff --git a/FreeSql.DbContext/readme.md b/FreeSql.DbContext/readme.md index ac006f8d..1540ea3b 100644 --- a/FreeSql.DbContext/readme.md +++ b/FreeSql.DbContext/readme.md @@ -191,7 +191,7 @@ uow.OnEntityChange = report => { 参数 report 是一个 List 集合,集合元素的类型定义如下: ```csharp -public class EntityChangeInfo +public class ChangeInfo { public object Object { get; set; } public EntityChangeType Type { get; set; } diff --git a/FreeSql.Repository/readme.md b/FreeSql.Repository/readme.md index 4c58c538..70620dec 100644 --- a/FreeSql.Repository/readme.md +++ b/FreeSql.Repository/readme.md @@ -213,7 +213,7 @@ uow.OnEntityChange = report => { 参数 report 是一个 List 集合,集合元素的类型定义如下: ```csharp -public class EntityChangeInfo +public class ChangeInfo { public object Object { get; set; } public EntityChangeType Type { get; set; }