- 修复 Repository/DbContext 同一实例执行报错后续无法再 CRUD;

This commit is contained in:
2881099
2022-11-07 18:16:54 +08:00
parent ebca77d08b
commit 3fbcb65089
3 changed files with 111 additions and 88 deletions

View File

@ -98,58 +98,64 @@ namespace FreeSql
}
};
while (_prevCommands.Any() || states.Any())
try
{
var info = _prevCommands.Any() ? _prevCommands.Dequeue() : null;
if (oldinfo == null) oldinfo = info;
var isLiveUpdate = false;
flagFuncUpdateLaststate = false;
if (_prevCommands.Any() == false && states.Any() ||
info != null && oldinfo.changeType != info.changeType ||
info != null && oldinfo.stateType != info.stateType ||
info != null && oldinfo.entityType != info.entityType)
while (_prevCommands.Any() || states.Any())
{
var info = _prevCommands.Any() ? _prevCommands.Dequeue() : null;
if (oldinfo == null) oldinfo = info;
var isLiveUpdate = false;
flagFuncUpdateLaststate = false;
if (info != null && oldinfo.changeType == info.changeType && oldinfo.stateType == info.stateType && oldinfo.entityType == info.entityType)
if (_prevCommands.Any() == false && states.Any() ||
info != null && oldinfo.changeType != info.changeType ||
info != null && oldinfo.stateType != info.stateType ||
info != null && oldinfo.entityType != info.entityType)
{
if (info != null && oldinfo.changeType == info.changeType && oldinfo.stateType == info.stateType && oldinfo.entityType == info.entityType)
{
//最后一个,合起来发送
states.Add(info.state);
info = null;
}
switch (oldinfo.changeType)
{
case EntityChangeType.Insert:
await funcInsert();
break;
case EntityChangeType.Delete:
await funcDelete();
break;
}
isLiveUpdate = true;
}
if (isLiveUpdate || oldinfo.changeType == EntityChangeType.Update)
{
if (states.Any())
{
await funcUpdate(isLiveUpdate);
if (info?.changeType == EntityChangeType.Update)
flagFuncUpdateLaststate = true;
}
}
if (info != null)
{
//最后一个,合起来发送
states.Add(info.state);
info = null;
oldinfo = info;
if (flagFuncUpdateLaststate && oldinfo.changeType == EntityChangeType.Update) //马上与上个元素比较
await funcUpdate(isLiveUpdate);
}
switch (oldinfo.changeType)
{
case EntityChangeType.Insert:
await funcInsert();
break;
case EntityChangeType.Delete:
await funcDelete();
break;
}
isLiveUpdate = true;
}
if (isLiveUpdate || oldinfo.changeType == EntityChangeType.Update)
{
if (states.Any())
{
await funcUpdate(isLiveUpdate);
if (info?.changeType == EntityChangeType.Update)
flagFuncUpdateLaststate = true;
}
}
if (info != null)
{
states.Add(info.state);
oldinfo = info;
if (flagFuncUpdateLaststate && oldinfo.changeType == EntityChangeType.Update) //马上与上个元素比较
await funcUpdate(isLiveUpdate);
}
}
isFlushCommanding = false;
finally
{
isFlushCommanding = false;
}
}
}
}