v1.7.1(兼容问题 Microsoft.Data.SqliClient) #394 #384 #330 #115 #17

This commit is contained in:
28810
2020-08-01 12:03:12 +08:00
parent fee937a677
commit f897aa0a71
25 changed files with 142 additions and 167 deletions

View File

@ -530,5 +530,91 @@ namespace FreeSql
}
}
#endregion
#region BeginEdit
protected List<TEntity> _dataEditing;
protected ConcurrentDictionary<string, EntityState> _statesEditing = new ConcurrentDictionary<string, EntityState>();
/// <summary>
/// 开始编辑数据,然后调用方法 EndEdit 分析出添加、修改、删除 SQL 语句进行执行<para></para>
/// 场景winform 加载表数据后,一顿添加、修改、删除操作之后,最后才点击【保存】<para></para><para></para>
/// 示例https://github.com/dotnetcore/FreeSql/issues/397<para></para>
/// </summary>
/// <param name="data"></param>
//public void BeginEdit(List<TEntity> data)
//{
// if (data == null || data.Any() == false) return;
// if (_table.Primarys.Any() == false) throw new Exception($"不可进行编辑,实体没有主键:{_db.OrmOriginal.GetEntityString(_entityType, data.First())}");
// _statesEditing.Clear();
// _dataEditing = data;
// foreach (var item in data)
// {
// var key = _db.OrmOriginal.GetEntityKeyString(_entityType, item, false);
// if (string.IsNullOrEmpty(key)) continue;
// _statesEditing.AddOrUpdate(key, k => CreateEntityState(item), (k, ov) =>
// {
// _db.OrmOriginal.MapEntityValue(_entityType, item, ov.Value);
// ov.Time = DateTime.Now;
// return ov;
// });
// }
//}
///// <summary>
///// 完成编辑数据,进行保存动作<para></para>
///// 该方法根据 BeginEdit 传入的状态分析出添加、修改、删除 SQL 语句
///// </summary>
///// <returns></returns>
//public int EndEdit()
//{
// var beforeAffrows = 0;
// if (_dataEditing == null) return 0;
// var oldEnable = _db.Options.EnableAddOrUpdateNavigateList;
// _db.Options.EnableAddOrUpdateNavigateList = false;
// try
// {
// DbContextFlushCommand();
// var addList = new List<TEntity>();
// var ediList = new List<TEntity>();
// foreach (var item in _dataEditing)
// {
// var key = _db.OrmOriginal.GetEntityKeyString(_entityType, item, false);
// if (_statesEditing.TryRemove(key, out var state) == false)
// {
// addList.Add(item);
// continue;
// }
// _states.AddOrUpdate(key, k => state, (k, ov) =>
// {
// ov.Value = state.Value;
// ov.Time = DateTime.Now;
// return ov;
// });
// if (_db.OrmOriginal.CompareEntityValueReturnColumns(_entityType, item, state.Value, false).Any())
// ediList.Add(item);
// }
// beforeAffrows = _db._affrows;
// AddRange(addList);
// UpdateRange(ediList);
// DbContextFlushCommand();
// var delList = _statesEditing.Values.OrderBy(a => a.Time).ToArray();
// _db._affrows += DbContextBatchRemove(delList); //为了减的少不必要的开销,此处没有直接调用 RemoveRange
// foreach (var state in delList)
// {
// _db.OrmOriginal.ClearEntityPrimaryValueWithIdentityAndGuid(_entityType, state.Value);
// _states.TryRemove(state.Key, out var oldstate);
// }
// DbContextFlushCommand();
// }
// finally
// {
// _dataEditing = null;
// _statesEditing.Clear();
// _db.Options.EnableAddOrUpdateNavigateList = oldEnable;
// }
// return _db._affrows - beforeAffrows;
//}
#endregion
}
}