rename DbContext Internal Method

This commit is contained in:
28810
2020-04-11 12:02:50 +08:00
parent 0154600d0a
commit bd79fc803e
9 changed files with 140 additions and 125 deletions

View File

@ -32,7 +32,7 @@ namespace FreeSql
protected virtual ISelect<TEntity> OrmSelect(object dywhere)
{
DbContextExecCommand(); //查询前先提交,否则会出脏读
DbContextFlushCommand(); //查询前先提交,否则会出脏读
return _db.OrmOriginal.Select<TEntity>().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction(false)).TrackToList(TrackToList).WhereDynamic(dywhere);
}
@ -70,7 +70,7 @@ namespace FreeSql
protected virtual IDelete<TEntity> OrmDelete(object dywhere) => _db.OrmOriginal.Delete<TEntity>().AsType(_entityType).WithTransaction(_uow?.GetOrBeginTransaction()).WhereDynamic(dywhere);
internal void EnqueueToDbContext(DbContext.EntityChangeType changeType, EntityState state) =>
_db.EnqueueAction(changeType, this, typeof(EntityState), _entityType, state);
_db.EnqueuePreCommand(changeType, this, typeof(EntityState), _entityType, state);
internal void IncrAffrows(int affrows) =>
_db._affrows += affrows;

View File

@ -14,10 +14,10 @@ namespace FreeSql
{
partial class DbSet<TEntity>
{
Task DbContextExecCommandAsync()
Task DbContextFlushCommandAsync()
{
_dicUpdateTimes.Clear();
return _db.ExecCommandAsync();
return _db.FlushCommandAsync();
}
async Task<int> DbContextBatchAddAsync(EntityState[] adds)
@ -43,7 +43,7 @@ namespace FreeSql
case DataType.OdbcPostgreSQL:
if (_tableIdentitys.Length == 1 && _table.Primarys.Length == 1)
{
await DbContextExecCommandAsync();
await DbContextFlushCommandAsync();
var idtval = await this.OrmInsert(data).ExecuteIdentityAsync();
IncrAffrows(1);
_db.OrmOriginal.SetEntityIdentityValueWithPrimary(_entityType, data, idtval);
@ -54,7 +54,7 @@ namespace FreeSql
}
else
{
await DbContextExecCommandAsync();
await DbContextFlushCommandAsync();
var newval = (await this.OrmInsert(data).ExecuteInsertedAsync()).First();
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = newval, Type = DbContext.EntityChangeType.Insert });
IncrAffrows(1);
@ -67,7 +67,7 @@ namespace FreeSql
default:
if (_tableIdentitys.Length == 1 && _table.Primarys.Length == 1)
{
await DbContextExecCommandAsync();
await DbContextFlushCommandAsync();
var idtval = await this.OrmInsert(data).ExecuteIdentityAsync();
IncrAffrows(1);
_db.OrmOriginal.SetEntityIdentityValueWithPrimary(_entityType, data, idtval);
@ -102,7 +102,7 @@ namespace FreeSql
case DataType.OdbcSqlServer:
case DataType.PostgreSQL:
case DataType.OdbcPostgreSQL:
await DbContextExecCommandAsync();
await DbContextFlushCommandAsync();
var rets = await this.OrmInsert(data).ExecuteInsertedAsync();
if (rets.Count != data.Count()) throw new Exception($"特别错误:批量添加失败,{_db.OrmOriginal.Ado.DataType} 的返回数据,与添加的数目不匹配");
_db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a, Type = DbContext.EntityChangeType.Insert }));
@ -149,7 +149,7 @@ namespace FreeSql
throw new ArgumentException($"{_table.Type.FullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性");
}
await DbContextExecCommandAsync();
await DbContextFlushCommandAsync();
var oldEnable = _db.Options.EnableAddOrUpdateNavigateList;
_db.Options.EnableAddOrUpdateNavigateList = false;
try
@ -157,7 +157,7 @@ namespace FreeSql
await AddOrUpdateNavigateListAsync(item, false, propertyName);
if (tref.RefType == Internal.Model.TableRefType.OneToMany)
{
await DbContextExecCommandAsync();
await DbContextFlushCommandAsync();
//删除没有保存的数据,求出主体的条件
var deleteWhereParentParam = Expression.Parameter(typeof(object), "a");
Expression whereParentExp = null;
@ -401,7 +401,7 @@ namespace FreeSql
foreach (var item in data)
{
if (_dicUpdateTimes.ContainsKey(item))
await DbContextExecCommandAsync();
await DbContextFlushCommandAsync();
_dicUpdateTimes.Add(item, 1);
var state = CreateEntityState(item);
@ -429,7 +429,7 @@ namespace FreeSql
/// <returns></returns>
async public Task<int> RemoveAsync(Expression<Func<TEntity, bool>> predicate)
{
await DbContextExecCommandAsync();
await DbContextFlushCommandAsync();
return await this.OrmDelete(null).Where(predicate).ExecuteAffrowsAsync();
}
#endregion
@ -449,10 +449,10 @@ namespace FreeSql
if (flagExists == true && CanUpdate(data, false))
{
await DbContextExecCommandAsync();
await DbContextFlushCommandAsync();
var affrows = _db._affrows;
await UpdateRangePrivAsync(new[] { data }, false);
await DbContextExecCommandAsync();
await DbContextFlushCommandAsync();
affrows = _db._affrows - affrows;
if (affrows > 0) return;
}

View File

@ -13,10 +13,10 @@ namespace FreeSql
partial class DbSet<TEntity>
{
void DbContextExecCommand()
void DbContextFlushCommand()
{
_dicUpdateTimes.Clear();
_db.ExecCommand();
_db.FlushCommand();
}
int DbContextBatchAdd(EntityState[] adds)
@ -42,7 +42,7 @@ namespace FreeSql
case DataType.OdbcPostgreSQL:
if (_tableIdentitys.Length == 1)
{
DbContextExecCommand();
DbContextFlushCommand();
var idtval = this.OrmInsert(data).ExecuteIdentity();
IncrAffrows(1);
_db.OrmOriginal.SetEntityIdentityValueWithPrimary(_entityType, data, idtval);
@ -53,7 +53,7 @@ namespace FreeSql
}
else
{
DbContextExecCommand();
DbContextFlushCommand();
var newval = this.OrmInsert(data).ExecuteInserted().First();
_db._entityChangeReport.Add(new DbContext.EntityChangeReport.ChangeInfo { Object = newval, Type = DbContext.EntityChangeType.Insert });
IncrAffrows(1);
@ -66,7 +66,7 @@ namespace FreeSql
default:
if (_tableIdentitys.Length == 1)
{
DbContextExecCommand();
DbContextFlushCommand();
var idtval = this.OrmInsert(data).ExecuteIdentity();
IncrAffrows(1);
_db.OrmOriginal.SetEntityIdentityValueWithPrimary(_entityType, data, idtval);
@ -105,7 +105,7 @@ namespace FreeSql
case DataType.OdbcSqlServer:
case DataType.PostgreSQL:
case DataType.OdbcPostgreSQL:
DbContextExecCommand();
DbContextFlushCommand();
var rets = this.OrmInsert(data).ExecuteInserted();
if (rets.Count != data.Count()) throw new Exception($"特别错误:批量添加失败,{_db.OrmOriginal.Ado.DataType} 的返回数据,与添加的数目不匹配");
_db._entityChangeReport.AddRange(rets.Select(a => new DbContext.EntityChangeReport.ChangeInfo { Object = a, Type = DbContext.EntityChangeType.Insert }));
@ -161,7 +161,7 @@ namespace FreeSql
throw new ArgumentException($"{_table.Type.FullName} 类型的属性 {propertyName} 不是 OneToMany 或 ManyToMany 特性");
}
DbContextExecCommand();
DbContextFlushCommand();
var oldEnable = _db.Options.EnableAddOrUpdateNavigateList;
_db.Options.EnableAddOrUpdateNavigateList = false;
try
@ -169,7 +169,7 @@ namespace FreeSql
AddOrUpdateNavigateList(item, false, propertyName);
if (tref.RefType == Internal.Model.TableRefType.OneToMany)
{
DbContextExecCommand();
DbContextFlushCommand();
//删除没有保存的数据,求出主体的条件
var deleteWhereParentParam = Expression.Parameter(typeof(object), "a");
Expression whereParentExp = null;
@ -442,7 +442,7 @@ namespace FreeSql
foreach (var item in data)
{
if (_dicUpdateTimes.ContainsKey(item))
DbContextExecCommand();
DbContextFlushCommand();
_dicUpdateTimes.Add(item, 1);
var state = CreateEntityState(item);
@ -488,7 +488,7 @@ namespace FreeSql
/// <returns></returns>
public int Remove(Expression<Func<TEntity, bool>> predicate)
{
DbContextExecCommand();
DbContextFlushCommand();
return this.OrmDelete(null).Where(predicate).ExecuteAffrows();
}
#endregion
@ -512,10 +512,10 @@ namespace FreeSql
if (flagExists == true && CanUpdate(data, false))
{
DbContextExecCommand();
DbContextFlushCommand();
var affrows = _db._affrows;
UpdateRangePriv(new[] { data }, false);
DbContextExecCommand();
DbContextFlushCommand();
affrows = _db._affrows - affrows;
if (affrows > 0) return;
}