左连接后缺少导航属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了左连接后缺少导航属性相关的知识,希望对你有一定的参考价值。

我正在尝试在两个具有导航属性的实体上进行左连接。我已禁用延迟加载。

这是我的代码:

var awis =
            from ai in Context.AdItems
                            .Include(ai => ai.Item)
                            .Include(ai => ai.Item.Buyer)
                            .Include(ai => ai.Item.OrderHeader)
                            .Where(ai => ai.AdYear == adYear && ai.AdNumber == adNumber)
            join si in Context.StoreItems
                            .Include(si => si.Store)
                            .Where(si => si.StoreId == storeId) on ai.ItemId equals si.ItemId into x
            from r in x.DefaultIfEmpty()
            select new AdWeekItem
            {
                AdItemId = ai.AdItemId,
                AdItem = ai,
                StoreItemId = r == null ? 0 : r.StoreItemId,
                StoreItem = r
            };

外连接工作正常但我没有包含在预计的AdWeekItem中的导航属性。

也就是说,AdWeekItem.AdItem.Item为null等。

如何包含这些导航属性并执行左外连接?

答案

在EF6中,当LINQ查询以投影(Include)结束时,always ignoreds是select new ...。您唯一的选择是显式查询您想要包含的导航属性,然后投影到最终结果:

var temp = from ai in Context.AdItems
                             .Where(ai => ai.AdYear == adYear && ai.AdNumber == adNumber)
            join si in Context.StoreItems
                              .Where(si => si.StoreId == storeId) on ai.ItemId equals si.ItemId into x
            from r in x.DefaultIfEmpty()
            select new 
            {
                AdItemId = ai.AdItemId,
                AdItem = ai,
                ai.Item,
                ai.Item.Buyer,
                ai.Item.OrderHeader,
                StoreItemId = r == null ? 0 : r.StoreItemId,
                StoreItem = r,
                r.Store
            };

var awis = from x in temp.AsEnumerable() // pull into memory and continue           
            select new AdWeekItem
            {
                AdItemId = x.AdItemId,
                AdItem = x.AdItem,
                StoreItemId = x.StoreItemId,
                StoreItem = x.StoreItem
            };

EF将通过关系修正(即导航属性的自动填充)填充AdItem.Item等。

以上是关于左连接后缺少导航属性的主要内容,如果未能解决你的问题,请参考以下文章

在片段的工具栏中向上导航

使用导航从一个片段导航到另一个片段后,防止后按工作

ORA-00907: 两个子查询的左连接缺少右括号

实体框架左外连接和分组:ORA-00907:缺少右括号

使用 React 实验性中继片段:缺少属性 '"$fragmentRefs"'

使用导航控制器按下后退按钮后如何防止前一个片段显示?