【发布时间】:2017-12-21 16:06:20
【问题描述】:
我正在尝试对两个具有导航属性的实体进行左连接。我已禁用延迟加载。
这是我的代码:
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为空等
如何包含这些导航属性并进行左外连接?
【问题讨论】:
-
我已明确禁用延迟加载。我不想使用延迟加载。
-
您是否在上下文创建中定义了适当的外键?
-
public int ItemId { get; set; } [ForeignKey(nameof(ItemId))] public Item Item { get; set; } -
您应该将外键应用于外键属性而不是导航属性,例如
[ForeignKey("Item")] public int ItemId { get; set; } public Item Item { get; set; } -
这就是我所拥有的:
/// <summary> /// A foreign key to the item. /// </summary> [ForeignKey(nameof(Item))] public int ItemId { get; set; } /// <summary> /// A navigation property to the item. /// </summary> [ForeignKey(nameof(ItemId))] public Item Item { get; set; }我两者都有。这适用于所有其他关系在我所有其他查询中,当我使用 Include 方法时。
标签: entity-framework entity-framework-6