- 修复 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; while (_prevCommands.Any() || states.Any())
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)
{ {
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); 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;
}
} }
} }
} }

View File

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

View File

@ -802,3 +802,14 @@
</member> </member>
</members> </members>
</doc> </doc>
Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
<summary>
批量注入 Repository可以参考代码自行调整
</summary>
<param name="services"></param>
<param name="globalDataFilter"></param>
<param name="assemblies"></param>
<returns></returns>
</member>
</members>
</doc>