Skip to content

Commit daffe5c

Browse files
committed
- 修复 Repository/DbContext 批量修改可能无效的 bug;#709
1 parent 7826089 commit daffe5c

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

FreeSql.DbContext/DbContext/DbContextAsync.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ async internal Task FlushCommandAsync(CancellationToken cancellationToken)
2828

2929
PrevCommandInfo oldinfo = null;
3030
var states = new List<object>();
31+
var flagFuncUpdateLaststate = false;
3132

3233
Task<int> dbsetBatch(string method)
3334
{
@@ -77,15 +78,23 @@ async Task funcUpdate(bool isLiveUpdate)
7778
{ //没有执行更新
7879
var laststate = states[states.Count - 1];
7980
states.Clear();
80-
if (affrows == -997) states.Add(laststate); //保留最后一个
81+
if (affrows == -997)
82+
{
83+
flagFuncUpdateLaststate = true;
84+
states.Add(laststate); //保留最后一个
85+
}
8186
}
8287
if (affrows > 0)
8388
{
8489
_affrows += affrows;
8590
var islastNotUpdated = states.Count != affrows;
8691
var laststate = states[states.Count - 1];
8792
states.Clear();
88-
if (islastNotUpdated) states.Add(laststate); //保留最后一个
93+
if (islastNotUpdated)
94+
{
95+
flagFuncUpdateLaststate = true;
96+
states.Add(laststate); //保留最后一个
97+
}
8998
}
9099
};
91100

@@ -94,6 +103,7 @@ async Task funcUpdate(bool isLiveUpdate)
94103
var info = _prevCommands.Any() ? _prevCommands.Dequeue() : null;
95104
if (oldinfo == null) oldinfo = info;
96105
var isLiveUpdate = false;
106+
flagFuncUpdateLaststate = false;
97107

98108
if (_prevCommands.Any() == false && states.Any() ||
99109
info != null && oldinfo.changeType != info.changeType ||
@@ -130,6 +140,9 @@ async Task funcUpdate(bool isLiveUpdate)
130140
{
131141
states.Add(info.state);
132142
oldinfo = info;
143+
144+
if (flagFuncUpdateLaststate && oldinfo.changeType == EntityChangeType.Update) //马上与上个元素比较
145+
await funcUpdate(isLiveUpdate);
133146
}
134147
}
135148
isFlushCommanding = false;

FreeSql.DbContext/DbContext/DbContextSync.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ internal void FlushCommand()
4444

4545
PrevCommandInfo oldinfo = null;
4646
var states = new List<object>();
47+
var flagFuncUpdateLaststate = false;
4748

4849
int dbsetBatch(string method)
4950
{
@@ -92,15 +93,23 @@ void funcUpdate(bool isLiveUpdate)
9293
{ //没有执行更新
9394
var laststate = states[states.Count - 1];
9495
states.Clear();
95-
if (affrows == -997) states.Add(laststate); //保留最后一个
96+
if (affrows == -997)
97+
{
98+
flagFuncUpdateLaststate = true;
99+
states.Add(laststate); //保留最后一个
100+
}
96101
}
97102
if (affrows > 0)
98103
{
99104
_affrows += affrows;
100105
var islastNotUpdated = states.Count != affrows;
101106
var laststate = states[states.Count - 1];
102107
states.Clear();
103-
if (islastNotUpdated) states.Add(laststate); //保留最后一个
108+
if (islastNotUpdated)
109+
{
110+
flagFuncUpdateLaststate = true;
111+
states.Add(laststate); //保留最后一个
112+
}
104113
}
105114
};
106115

@@ -109,6 +118,7 @@ void funcUpdate(bool isLiveUpdate)
109118
var info = _prevCommands.Any() ? _prevCommands.Dequeue() : null;
110119
if (oldinfo == null) oldinfo = info;
111120
var isLiveUpdate = false;
121+
flagFuncUpdateLaststate = false;
112122

113123
if (_prevCommands.Any() == false && states.Any() ||
114124
info != null && oldinfo.changeType != info.changeType ||
@@ -145,6 +155,9 @@ void funcUpdate(bool isLiveUpdate)
145155
{
146156
states.Add(info.state);
147157
oldinfo = info;
158+
159+
if (flagFuncUpdateLaststate && oldinfo.changeType == EntityChangeType.Update) //马上与上个元素比较
160+
funcUpdate(isLiveUpdate);
148161
}
149162
}
150163
isFlushCommanding = false;

0 commit comments

Comments
 (0)