From cbbc47ea66ff245589ef4b0971fbe2135d3abf02 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Sun, 11 Sep 2022 15:58:59 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20DbSet/Repository=20?= =?UTF-8?q?=E9=98=B2=E6=AD=A2=20Aop.AuditValue=20=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E4=B8=A4=E6=AC=A1=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/DbSet/DbSet.cs | 18 +++++++++++++++--- FreeSql.DbContext/DbSet/DbSetAsync.cs | 2 +- FreeSql.DbContext/DbSet/DbSetSync.cs | 2 +- FreeSql.DbContext/FreeSql.DbContext.xml | 18 ++++++++++++++++++ .../Internal/CommonProvider/InsertProvider.cs | 1 - 5 files changed, 35 insertions(+), 6 deletions(-) diff --git a/FreeSql.DbContext/DbSet/DbSet.cs b/FreeSql.DbContext/DbSet/DbSet.cs index 03936ff0..6b6f617d 100644 --- a/FreeSql.DbContext/DbSet/DbSet.cs +++ b/FreeSql.DbContext/DbSet/DbSet.cs @@ -8,6 +8,7 @@ using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Threading; +using FreeSql.Internal.CommonProvider; namespace FreeSql { @@ -62,15 +63,26 @@ namespace FreeSql if (_db.Options.NoneParameter != null) insert.NoneParameter(_db.Options.NoneParameter.Value); return insert; } - protected virtual IInsert OrmInsert(TEntity data) => OrmInsert().AppendData(data); - protected virtual IInsert OrmInsert(IEnumerable data) => OrmInsert().AppendData(data); + protected virtual IInsert OrmInsert(TEntity data) + { + var insert = OrmInsert(); + if (data != null) (insert as InsertProvider)._source.Add(data); //防止 Aop.AuditValue 触发两次 + return insert; + } + protected virtual IInsert OrmInsert(IEnumerable data) + { + var insert = OrmInsert(); + if (data != null) (insert as InsertProvider)._source.AddRange(data.Where(a => a != null)); //防止 Aop.AuditValue 触发两次 + return insert; + } protected virtual IUpdate OrmUpdate(IEnumerable entitys) { var update = _db.OrmOriginal.Update().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction()); if (_db.Options.NoneParameter != null) update.NoneParameter(_db.Options.NoneParameter.Value); if (_db.Options.EnableGlobalFilter == false) update.DisableGlobalFilter(); - return update.SetSource(entitys); + if (entitys != null) (update as UpdateProvider)._source.AddRange(entitys.Where(a => a != null)); //防止 Aop.AuditValue 触发两次 + return update; } protected virtual IDelete OrmDelete(object dywhere) { diff --git a/FreeSql.DbContext/DbSet/DbSetAsync.cs b/FreeSql.DbContext/DbSet/DbSetAsync.cs index 8ecea3cc..82fcc7fd 100644 --- a/FreeSql.DbContext/DbSet/DbSetAsync.cs +++ b/FreeSql.DbContext/DbSet/DbSetAsync.cs @@ -402,7 +402,7 @@ namespace FreeSql if (cuig.Length == _table.Columns.Count) return ups.Length == data.Count ? -998 : -997; - var update = this.OrmUpdate(null).SetSource(data.Select(a => a.Value)).IgnoreColumns(cuig); + var update = this.OrmUpdate(data.Select(a => a.Value)).IgnoreColumns(cuig); var affrows = await update.ExecuteAffrowsAsync(cancellationToken); _db._entityChangeReport.AddRange(data.Select(a => new DbContext.EntityChangeReport.ChangeInfo { diff --git a/FreeSql.DbContext/DbSet/DbSetSync.cs b/FreeSql.DbContext/DbSet/DbSetSync.cs index 204ebcc5..842733ba 100644 --- a/FreeSql.DbContext/DbSet/DbSetSync.cs +++ b/FreeSql.DbContext/DbSet/DbSetSync.cs @@ -436,7 +436,7 @@ namespace FreeSql if (cuig.Length == _table.Columns.Count) return ups.Length == data.Count ? -998 : -997; - var update = this.OrmUpdate(null).SetSource(data.Select(a => a.Value)).IgnoreColumns(cuig); + var update = this.OrmUpdate(data.Select(a => a.Value)).IgnoreColumns(cuig); var affrows = update.ExecuteAffrows(); _db._entityChangeReport.AddRange(data.Select(a => new DbContext.EntityChangeReport.ChangeInfo { diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 594fbad3..26522f10 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -733,6 +733,15 @@ + + + 根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类 + + + + + + 创建普通数据上下文档对象 @@ -791,5 +800,14 @@ + + + 批量注入 Repository,可以参考代码自行调整 + + + + + + diff --git a/FreeSql/Internal/CommonProvider/InsertProvider.cs b/FreeSql/Internal/CommonProvider/InsertProvider.cs index 045fd998..d7ea18b3 100644 --- a/FreeSql/Internal/CommonProvider/InsertProvider.cs +++ b/FreeSql/Internal/CommonProvider/InsertProvider.cs @@ -147,7 +147,6 @@ namespace FreeSql.Internal.CommonProvider UpdateProvider.GetDictionaryTableInfo(source, _orm, ref _table); AuditDataValue(this, source, _orm, _table, _auditValueChangedDict); _source.AddRange(source); - } return this; }