EF 6复杂查询包括不包括关系

时间:2017-11-10 12:53:35

标签: c# .net database entity-framework entity-relationship

我有一个有点复杂的结构,我不会进入, 但我尝试做的是:

获取所有ShopItem,SourceItem已更改, 根据他们的来源/商店数据获取并更新它们。

我想到了以下内容:

var query = _ctx.ShopItems
            .Include(si => si.Shop)
            .Include(si=>si.SourceItem)
            .Include(si => si.SourceItem.Source)
            .Include(si=>si.Shop.ShopType)
            .GroupBy(i => i.SourceItem)
            .Where(g => g.Key.LastUpdate > lastUpdate)
            .OrderBy(g => g.Key.LastUpdate)
            .Take(updateCountLimit);

查询似乎有效,但在尝试使用群组时:

groupItem.Key.Source为空。

我通过删除Include(),将实体保存到数组并使用显式加载引用来解决它 _ctx.Entry(updatedSourceItem.Key).Reference(src=>src.Source).Load();

如何在不转发数据库以进行显式加载的情况下执行我想要的查询?

1 个答案:

答案 0 :(得分:1)

不确定,但是从ShopItem开始,然后按SourceItem分组。尝试从SourceItem开始,比如

:

    var query = _ctx.SourceItems
                    .Include(i => i.ShopItems)
                    .Include(i => i.Source)
                    .Include(i => i.ShopItems.Select( si => si.Shop))
                    .Include(i => i.ShopItems.Select( si => si.Shop).ShopType)
                    .Where(i => i.LastUpdate > lastUpdate)
                    .OrderBy(i => i.LastUpdate)
                    .Take(updateCountLimit);
//or 

    var query = _ctx.SourceItems
                    .Include("ShopItems")
                    .Include("Source")
                    .Include("ShopItems.Shops")
                    .Include("ShopItems.Shops.ShopType")
                    .Where(i => i.LastUpdate > lastUpdate)
                    .OrderBy(i => i.LastUpdate)
                    .Take(updateCountLimit);