我的问题是关于EF提供的类似广度优先的实体检索。 在我的EF代码优先模型中,我有一个树状的层次结构,例如由产品实例和一些附加费组成的法案。
public class Bill
{
public int Id { get; set; }
public virtual ICollection<Product> Products { get; set; }
public virtual ICollection<BillSurcharge> Surcharges { get; set; }
// ...
}
public class Product
{
public int Id { get; set; }
public virtual Bill Bill { get; set; }
public int BillId { get; set; }
public virtual ICollection<ProductSurcharge> Surcharges { get; set; }
// ...
}
// ...
我观察到在上述实体的情况下,查询
context.Bills.Include("Products").Include("Products.Surcharges").Include("Surcharges")
导致以下实体检索序列。
但是,交换声明产品和附加费的行会产生以下顺序。
相反,交换Include()似乎没有任何后果。我使用EF 5。
为了避免过于复杂的事件处理(负责在给定账单树的所有实体对象中更新属性值,我正在寻找某些假设。
在您看来,是否合理地假设保留了某个加载顺序?
答案 0 :(得分:0)
在假设至少父母实体在孩子之前加载(即比尔在产品之前加载)之后,今天我开悟了(感谢Colin Blair!),因为在父母之前加载了一个子实体。因此,对于初始化事件处理,有以下两种解决方案。