【发布时间】:2016-04-26 11:01:10
【问题描述】:
假设我们有一个Invoice 对象和InvoiceRow 子对象作为实体框架 模型。
现在我们向Invoice-model 添加一个需要访问行的方法,例如:
invoice.Sum()
如果行没有与发票一起显式加载,则此方法 Sum() 将失败。 处理此问题的最佳方法是什么?
您是否应该在加载实体时“必须记住”include 子对象?或者如果null,Sum()-方法本身是否应该显式加载孩子?您还可以在Sum()-方法中对数据库进行新查询,并在其中包含子对象,但如果有未保存的更改怎么办?
【问题讨论】:
-
这取决于你想要什么。两种方式都有效。您想减少对数据库的查询次数吗?你想最小化加载的数据吗?你想使用 Linq to Entities
Sum方法吗?这完全取决于你想要什么。 -
我认为 Sum() 无法显式加载子对象,因此如果关闭延迟加载并且在调用 Sum() 之前未显式加载子对象,则该方法会失败。
-
@ChrisWyatt 您可以根据
Invoice.Id进行新查询并加载InvoiceRows -
@Default 那不需要 Invoice 对象引用 DbContext 吗?
-
@ChrisWyatt 不,不是真的。我并不是说要为现有的
Invoice填充InvoiceRows,但是您可以独立地从发票中加载行,然后根据需要对它们进行求和。基本上var rows = context.InvoiceRows.Where(ir => ir.InvoiceId == loadedInvoice.Id);
标签: c# entity-framework model-view-controller