mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-18 20:08:15 +08:00
- 增加 FreeSql.DbContext 实体对象的变化事件;
> 文档:https://github.com/2881099/FreeSql/wiki/DbContext#%E5%AE%9E%E4%BD%93%E5%8F%98%E5%8C%96%E4%BA%8B%E4%BB%B6 - 补充 Aop.CurdBefore 事件参数 Table 实体类型的元数据;
This commit is contained in:
@ -23,6 +23,7 @@ namespace FreeSql
|
||||
{
|
||||
if (adds.Any() == false) return 0;
|
||||
var affrows = await this.OrmInsert(adds.Select(a => a.Value)).ExecuteAffrowsAsync();
|
||||
_db._entityChangeReport.AddRange(adds.Select(a => new DbContext.EntityChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Insert }));
|
||||
return affrows;
|
||||
}
|
||||
|
||||
@ -45,6 +46,7 @@ namespace FreeSql
|
||||
var idtval = await this.OrmInsert(data).ExecuteIdentityAsync();
|
||||
IncrAffrows(1);
|
||||
_db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval);
|
||||
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert });
|
||||
Attach(data);
|
||||
if (_db.Options.EnableAddOrUpdateNavigateList)
|
||||
await AddOrUpdateNavigateListAsync(data, true);
|
||||
@ -53,6 +55,7 @@ namespace FreeSql
|
||||
{
|
||||
await DbContextExecCommandAsync();
|
||||
var newval = (await this.OrmInsert(data).ExecuteInsertedAsync()).First();
|
||||
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = newval, Type = DbContext.EntityChangeType.Insert });
|
||||
IncrAffrows(1);
|
||||
_db.Orm.MapEntityValue(_entityType, newval, data);
|
||||
Attach(newval);
|
||||
@ -67,6 +70,7 @@ namespace FreeSql
|
||||
var idtval = await this.OrmInsert(data).ExecuteIdentityAsync();
|
||||
IncrAffrows(1);
|
||||
_db.Orm.SetEntityIdentityValueWithPrimary(_entityType, data, idtval);
|
||||
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = data, Type = DbContext.EntityChangeType.Insert });
|
||||
Attach(data);
|
||||
if (_db.Options.EnableAddOrUpdateNavigateList)
|
||||
await AddOrUpdateNavigateListAsync(data, true);
|
||||
@ -74,7 +78,7 @@ namespace FreeSql
|
||||
return;
|
||||
}
|
||||
}
|
||||
EnqueueToDbContext(DbContext.ExecCommandInfoType.Insert, CreateEntityState(data));
|
||||
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(data));
|
||||
Attach(data);
|
||||
if (_db.Options.EnableAddOrUpdateNavigateList)
|
||||
await AddOrUpdateNavigateListAsync(data, true);
|
||||
@ -100,6 +104,7 @@ namespace FreeSql
|
||||
await DbContextExecCommandAsync();
|
||||
var rets = await this.OrmInsert(data).ExecuteInsertedAsync();
|
||||
if (rets.Count != data.Count()) throw new Exception($"特别错误:批量添加失败,{_db.Orm.Ado.DataType} 的返回数据,与添加的数目不匹配");
|
||||
_db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeInfo { Object = a, Type = DbContext.EntityChangeType.Insert }));
|
||||
var idx = 0;
|
||||
foreach (var s in data)
|
||||
_db.Orm.MapEntityValue(_entityType, rets[idx++], s);
|
||||
@ -119,7 +124,7 @@ namespace FreeSql
|
||||
{
|
||||
//进入队列,等待 SaveChanges 时执行
|
||||
foreach (var item in data)
|
||||
EnqueueToDbContext(DbContext.ExecCommandInfoType.Insert, CreateEntityState(item));
|
||||
EnqueueToDbContext(DbContext.EntityChangeType.Insert, CreateEntityState(item));
|
||||
AttachRange(data);
|
||||
if (_db.Options.EnableAddOrUpdateNavigateList)
|
||||
foreach (var item in data)
|
||||
@ -193,7 +198,9 @@ namespace FreeSql
|
||||
{
|
||||
var delall = _db.Orm.Delete<object>().AsType(tref.RefMiddleEntityType);
|
||||
foreach (var midWhere in midWheres) delall.Where(midWhere);
|
||||
var sql = delall.ToSql();
|
||||
await delall.ExecuteAffrowsAsync();
|
||||
_db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
|
||||
}
|
||||
else //保存
|
||||
{
|
||||
@ -314,6 +321,7 @@ namespace FreeSql
|
||||
var update = this.OrmUpdate(null).SetSource(updateSource).IgnoreColumns(cuig);
|
||||
|
||||
var affrows = await update.ExecuteAffrowsAsync();
|
||||
_db._entityChangeReport.AddRange(updateSource.Select(a => new DbContext.EntityChangeInfo { Object = a, Type = DbContext.EntityChangeType.Update }));
|
||||
|
||||
foreach (var newval in data)
|
||||
{
|
||||
@ -352,7 +360,7 @@ namespace FreeSql
|
||||
|
||||
var state = CreateEntityState(item);
|
||||
state.OldValue = item;
|
||||
EnqueueToDbContext(DbContext.ExecCommandInfoType.Update, state);
|
||||
EnqueueToDbContext(DbContext.EntityChangeType.Update, state);
|
||||
}
|
||||
if (_db.Options.EnableAddOrUpdateNavigateList)
|
||||
foreach (var item in data)
|
||||
@ -365,6 +373,7 @@ namespace FreeSql
|
||||
{
|
||||
if (dels.Any() == false) return 0;
|
||||
var affrows = await this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrowsAsync();
|
||||
_db._entityChangeReport.AddRange(dels.Select(a => new DbContext.EntityChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Delete }));
|
||||
return Math.Max(dels.Length, affrows);
|
||||
}
|
||||
#endregion
|
||||
|
Reference in New Issue
Block a user