延迟加载子实体集合
Lazy load sub entity collection
我有一个产品实体和一个 child 产品实体:
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; }
}
在我的上下文中,我只是使用以下方法获取产品及其 children:
return _axaptaContext.Products
.Include(x => x.Children)
.Include(x => x.Attributes);
现在我希望 children 也包含属性,所以我尝试使用
return _axaptaContext.Products
.Include(x => x.Children)
.Include("Children.Attributes")
.Include(x => x.Attributes);
但这会导致查询超时。我如何延迟加载 children 的属性,就像我尝试调用时一样:
product.Children.Attribtutes
它只是 returns 空。我发现的关于延迟加载的所有内容都表明,如果我将属性标记为虚拟
,则它们应该被延迟加载
首先,您不需要调用 .Include("Children.Attributes")
来 lazy 加载,而是 eager 加载实体。
只需确保您已将上下文对象的 LazyLoadingEnabled
& ProxyCreationEnabled
设置为 true。现在,当您在 属性 sql 上调用 get 来获取实体时,实体将自动被触发,您将填充对象。
context.Configuration.ProxyCreationEnabled = true;
context.Configuration.LazyLoadingEnabled = true;
注意:属性你要延迟加载需要是虚拟的。
我有一个产品实体和一个 child 产品实体:
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; }
}
在我的上下文中,我只是使用以下方法获取产品及其 children:
return _axaptaContext.Products
.Include(x => x.Children)
.Include(x => x.Attributes);
现在我希望 children 也包含属性,所以我尝试使用
return _axaptaContext.Products
.Include(x => x.Children)
.Include("Children.Attributes")
.Include(x => x.Attributes);
但这会导致查询超时。我如何延迟加载 children 的属性,就像我尝试调用时一样:
product.Children.Attribtutes
它只是 returns 空。我发现的关于延迟加载的所有内容都表明,如果我将属性标记为虚拟
,则它们应该被延迟加载首先,您不需要调用 .Include("Children.Attributes")
来 lazy 加载,而是 eager 加载实体。
只需确保您已将上下文对象的 LazyLoadingEnabled
& ProxyCreationEnabled
设置为 true。现在,当您在 属性 sql 上调用 get 来获取实体时,实体将自动被触发,您将填充对象。
context.Configuration.ProxyCreationEnabled = true;
context.Configuration.LazyLoadingEnabled = true;
注意:属性你要延迟加载需要是虚拟的。