- 修复 Repository/DbContext 批量修改可能无效的 bug;#709

This commit is contained in:
2881099 2021-03-05 23:31:59 +08:00
parent 7826089b64
commit daffe5c082
2 changed files with 30 additions and 4 deletions

View File

@ -28,6 +28,7 @@ namespace FreeSql
PrevCommandInfo oldinfo = null; PrevCommandInfo oldinfo = null;
var states = new List<object>(); var states = new List<object>();
var flagFuncUpdateLaststate = false;
Task<int> dbsetBatch(string method) Task<int> dbsetBatch(string method)
{ {
@ -77,7 +78,11 @@ namespace FreeSql
{ //没有执行更新 { //没有执行更新
var laststate = states[states.Count - 1]; var laststate = states[states.Count - 1];
states.Clear(); states.Clear();
if (affrows == -997) states.Add(laststate); //保留最后一个 if (affrows == -997)
{
flagFuncUpdateLaststate = true;
states.Add(laststate); //保留最后一个
}
} }
if (affrows > 0) if (affrows > 0)
{ {
@ -85,7 +90,11 @@ namespace FreeSql
var islastNotUpdated = states.Count != affrows; var islastNotUpdated = states.Count != affrows;
var laststate = states[states.Count - 1]; var laststate = states[states.Count - 1];
states.Clear(); states.Clear();
if (islastNotUpdated) states.Add(laststate); //保留最后一个 if (islastNotUpdated)
{
flagFuncUpdateLaststate = true;
states.Add(laststate); //保留最后一个
}
} }
}; };
@ -94,6 +103,7 @@ namespace FreeSql
var info = _prevCommands.Any() ? _prevCommands.Dequeue() : null; var info = _prevCommands.Any() ? _prevCommands.Dequeue() : null;
if (oldinfo == null) oldinfo = info; if (oldinfo == null) oldinfo = info;
var isLiveUpdate = false; var isLiveUpdate = false;
flagFuncUpdateLaststate = false;
if (_prevCommands.Any() == false && states.Any() || if (_prevCommands.Any() == false && states.Any() ||
info != null && oldinfo.changeType != info.changeType || info != null && oldinfo.changeType != info.changeType ||
@ -130,6 +140,9 @@ namespace FreeSql
{ {
states.Add(info.state); states.Add(info.state);
oldinfo = info; oldinfo = info;
if (flagFuncUpdateLaststate && oldinfo.changeType == EntityChangeType.Update) //马上与上个元素比较
await funcUpdate(isLiveUpdate);
} }
} }
isFlushCommanding = false; isFlushCommanding = false;

View File

@ -44,6 +44,7 @@ namespace FreeSql
PrevCommandInfo oldinfo = null; PrevCommandInfo oldinfo = null;
var states = new List<object>(); var states = new List<object>();
var flagFuncUpdateLaststate = false;
int dbsetBatch(string method) int dbsetBatch(string method)
{ {
@ -92,7 +93,11 @@ namespace FreeSql
{ //没有执行更新 { //没有执行更新
var laststate = states[states.Count - 1]; var laststate = states[states.Count - 1];
states.Clear(); states.Clear();
if (affrows == -997) states.Add(laststate); //保留最后一个 if (affrows == -997)
{
flagFuncUpdateLaststate = true;
states.Add(laststate); //保留最后一个
}
} }
if (affrows > 0) if (affrows > 0)
{ {
@ -100,7 +105,11 @@ namespace FreeSql
var islastNotUpdated = states.Count != affrows; var islastNotUpdated = states.Count != affrows;
var laststate = states[states.Count - 1]; var laststate = states[states.Count - 1];
states.Clear(); states.Clear();
if (islastNotUpdated) states.Add(laststate); //保留最后一个 if (islastNotUpdated)
{
flagFuncUpdateLaststate = true;
states.Add(laststate); //保留最后一个
}
} }
}; };
@ -109,6 +118,7 @@ namespace FreeSql
var info = _prevCommands.Any() ? _prevCommands.Dequeue() : null; var info = _prevCommands.Any() ? _prevCommands.Dequeue() : null;
if (oldinfo == null) oldinfo = info; if (oldinfo == null) oldinfo = info;
var isLiveUpdate = false; var isLiveUpdate = false;
flagFuncUpdateLaststate = false;
if (_prevCommands.Any() == false && states.Any() || if (_prevCommands.Any() == false && states.Any() ||
info != null && oldinfo.changeType != info.changeType || info != null && oldinfo.changeType != info.changeType ||
@ -145,6 +155,9 @@ namespace FreeSql
{ {
states.Add(info.state); states.Add(info.state);
oldinfo = info; oldinfo = info;
if (flagFuncUpdateLaststate && oldinfo.changeType == EntityChangeType.Update) //马上与上个元素比较
funcUpdate(isLiveUpdate);
} }
} }
isFlushCommanding = false; isFlushCommanding = false;