我需要从我的数据库中检索具有许多关系的大型实体层次结构。我没有用许多创建一个巨大的查询Includes
,而是读到可以使用许多较小的查询来获取层次结构的不同部分,然后 EF 以某种方式使用称为“关联修复”的东西将所有内容粘合在一起。但是我正在努力让它发挥作用。(顺便说一下,我正在使用 EF5 和 POCO)。
作为一个简单的例子,我正在尝试使用“修复”技术检索客户及其所有相关订单。这就是我在 BLL 层中所做的事情:-
var customer = context.Customers
.Where(o => o.Id == requestedCustomerId).SingleOrDefault();
customer.Orders = context.Orders
.Where(o => o.CustomerId = requestedCustomerId).ToList();
当我检查返回到 UI 层的客户实体时,customer.Orders 给出了 ObjectDisposedException。我究竟做错了什么?
作为如何使用 fixup 的另一个示例,我将如何填充 Orders 的相关 OrderLines(在单独的查询中,或作为上面第二个查询的一部分)?如果 OrderLine 实体有一个 ProductCategory 父实体怎么办 - 我将如何填充这些?
更新
我刚刚尝试了以下方法,它有效: -
var orders = context.Orders
.Where(o => o.CustomerId = requestedCustomerId).ToList();
var customer = context.Customers
.Where(o => o.Id == requestedCustomerId)
.Include("Orders")
.SingleOrDefault();
我是否正确地说第二个查询不会再次从数据库中获取订单,并且 EF 会将前一个查询检索到的那些关联起来(即使它们只是位于某个任意变量中)?