mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +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 = this.OrmInsert(adds.Select(a => a.Value)).ExecuteAffrows();
 | 
			
		||||
            _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 = this.OrmInsert(data).ExecuteIdentity();
 | 
			
		||||
                            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)
 | 
			
		||||
                                AddOrUpdateNavigateList(data, true);
 | 
			
		||||
@@ -53,6 +55,7 @@ namespace FreeSql
 | 
			
		||||
                        {
 | 
			
		||||
                            DbContextExecCommand();
 | 
			
		||||
                            var newval = this.OrmInsert(data).ExecuteInserted().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 = this.OrmInsert(data).ExecuteIdentity();
 | 
			
		||||
                            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)
 | 
			
		||||
                                AddOrUpdateNavigateList(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)
 | 
			
		||||
                AddOrUpdateNavigateList(data, true);
 | 
			
		||||
@@ -104,6 +108,7 @@ namespace FreeSql
 | 
			
		||||
                        DbContextExecCommand();
 | 
			
		||||
                        var rets = this.OrmInsert(data).ExecuteInserted();
 | 
			
		||||
                        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);
 | 
			
		||||
@@ -123,7 +128,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)
 | 
			
		||||
@@ -203,7 +208,9 @@ namespace FreeSql
 | 
			
		||||
                        {
 | 
			
		||||
                            var delall = _db.Orm.Delete<object>().AsType(tref.RefMiddleEntityType);
 | 
			
		||||
                            foreach (var midWhere in midWheres) delall.Where(midWhere);
 | 
			
		||||
                            var sql = delall.ToSql();
 | 
			
		||||
                            delall.ExecuteAffrows();
 | 
			
		||||
                            _db._entityChangeReport.Add(new DbContext.EntityChangeInfo { Object = sql, Type = DbContext.EntityChangeType.SqlRaw });
 | 
			
		||||
                        }
 | 
			
		||||
                        else //保存
 | 
			
		||||
                        {
 | 
			
		||||
@@ -324,6 +331,7 @@ namespace FreeSql
 | 
			
		||||
                var update = this.OrmUpdate(null).SetSource(updateSource).IgnoreColumns(cuig);
 | 
			
		||||
 | 
			
		||||
                var affrows = update.ExecuteAffrows();
 | 
			
		||||
                _db._entityChangeReport.AddRange(updateSource.Select(a => new DbContext.EntityChangeInfo { Object = a, Type = DbContext.EntityChangeType.Update }));
 | 
			
		||||
 | 
			
		||||
                foreach (var newval in data)
 | 
			
		||||
                {
 | 
			
		||||
@@ -368,7 +376,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)
 | 
			
		||||
@@ -381,6 +389,7 @@ namespace FreeSql
 | 
			
		||||
        {
 | 
			
		||||
            if (dels.Any() == false) return 0;
 | 
			
		||||
            var affrows = this.OrmDelete(dels.Select(a => a.Value)).ExecuteAffrows();
 | 
			
		||||
            _db._entityChangeReport.AddRange(dels.Select(a => new DbContext.EntityChangeInfo { Object = a.Value, Type = DbContext.EntityChangeType.Delete }));
 | 
			
		||||
            return Math.Max(dels.Length, affrows);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -398,7 +407,7 @@ namespace FreeSql
 | 
			
		||||
                _states.TryRemove(state.Key, out var trystate);
 | 
			
		||||
                _db.Orm.ClearEntityPrimaryValueWithIdentityAndGuid(_entityType, item);
 | 
			
		||||
 | 
			
		||||
                EnqueueToDbContext(DbContext.ExecCommandInfoType.Delete, state);
 | 
			
		||||
                EnqueueToDbContext(DbContext.EntityChangeType.Delete, state);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        #endregion
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user