我有一个产品实体和一个子产品实体:
public class Product
{
public virtual ICollection<ProdAttribute> Attributes { get; set; }
public virtual ICollection<ChildProduct> Children { get; set; }
public string ItemID { get; set; }
public string ItemName { get; set; }
}
public class ChildProduct
{
public virtual ICollection<ProdAttribute> Attributes { get; set; }
public int DisplayOrder { get; set; }
public string ItemID { get; set; }
public string ItemName { get; set; }
public virtual Product Parent { get; set; }
public string ParentItemID { get; set; }
public string Size { get; set; }
}
在我的背景下,我只是使用以下内容抓住产品及其子女:
return _axaptaContext.Products
.Include(x => x.Children)
.Include(x => x.Attributes);
现在我希望孩子们也包含这些属性,所以我尝试使用
return _axaptaContext.Products
.Include(x => x.Children)
.Include("Children.Attributes")
.Include(x => x.Attributes);
但是这会导致查询超时。当我试图调用时,如何延迟加载子项的属性:
product.Children.Attribtutes
它只返回null。我发现的关于延迟加载的所有内容都说如果我将它们标记为虚拟
,属性应该是延迟加载的答案 0 :(得分:2)
首先,您不需要将.Include("Children.Attributes")
调用延迟加载,而是用于急切加载实体。
确保您已设置LazyLoadingEnabled
&amp;对于上下文对象,ProxyCreationEnabled
为true。现在当你调用属性sql上的get来获取实体时会自动被触发,你将获得对象的填充。
context.Configuration.ProxyCreationEnabled = true;
context.Configuration.LazyLoadingEnabled = true;
注意:您想要延迟加载的属性需要是虚拟的。