我正在使用DbSet进行修改,并在将这些更改保存到数据库之前过滤我修改过的数据。
表的初始内容:
Id,Name,Left,Right
1,All,1,28
2,Press,2,13
3,NewDeals,3,4
4,Contracts,5,6
5,People,7,12
6,Promotions,8,9
7,Deaths,10,11,
8,Finanse,14,19
9,Results,15,16,
10,Stocks,17,18
11,Stories,20,25
12,SuccessStories,21,22,
13,LearnStories,23,24
14,AccessToEverything,26,27
步骤如下:
//items are DbSet
var nodeLeft = 10;
var nodeRight = 11;
var parentNodeRight = 28;
var size = 2;
var itemsToUpdate = items.Where(i => i.Left >= nodeLeft && i.Right <= nodeRight);
foreach (var item in itemsToUpdate)
{
item.Left = 0 - item.Left;
item.Right = 0 - item.Right;
}
// step 2
itemsToUpdate = items.Where(i => i.Left > nodeRight);
foreach (var item in itemsToUpdate)
{
item.Left = item.Left - size;
}
itemsToUpdate = items.Where(i => i.Right > nodeRight);
foreach (var item in itemsToUpdate)
{
item.Right = item.Right - size;
}
//step 3
itemsToUpdate =
items.Where(i => i.Left >= (parentNodeRight > nodeRight ? parentNodeRight - size : parentNodeRight));
foreach (var item in itemsToUpdate)
{
item.Left = item.Left + size;
}
在步骤3中,where语句返回的值不符合where中的语句。
看起来EF正在过滤不在内存中但在DB中的数据。
如果我通过应用items
将toList()
更改为常规列表,则一切正常。
我真的想避免这种情况,因为我正在处理的数据集非常大,我最初无法预先过滤它。
你能否告诉我这里错过/做错了什么?