同时过滤和修改DbSet

时间:2017-02-10 14:53:31

标签: entity-framework

我正在使用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中的数据。 如果我通过应用itemstoList()更改为常规列表,则一切正常。 我真的想避免这种情况,因为我正在处理的数据集非常大,我最初无法预先过滤它。

你能否告诉我这里错过/做错了什么?

0 个答案:

没有答案