diff --git a/FreeSql.DbContext/DbContext/DbContextAsync.cs b/FreeSql.DbContext/DbContext/DbContextAsync.cs index af4717b7..811ecfe7 100644 --- a/FreeSql.DbContext/DbContext/DbContextAsync.cs +++ b/FreeSql.DbContext/DbContext/DbContextAsync.cs @@ -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; + } } } } diff --git a/FreeSql.DbContext/DbContext/DbContextSync.cs b/FreeSql.DbContext/DbContext/DbContextSync.cs index e5aad882..7b4fde35 100644 --- a/FreeSql.DbContext/DbContext/DbContextSync.cs +++ b/FreeSql.DbContext/DbContext/DbContextSync.cs @@ -113,58 +113,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: + 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); - 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; + } } } } diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 537315e2..6ca84f12 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -802,3 +802,14 @@ +Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])"> + + 批量注入 Repository,可以参考代码自行调整 + + + + + + + +