我不知道如何解决这个linq to SQL问题。我的对象图中的子对象的属性没有像我期望的那样加载。
我的数据访问代码封装在模型层中,因此需要在返回对象之前完成对完整对象图的加载。
我使用以下代码填充对象图。
“Invoice”是此处的目标对象。它有一个父对象“Order”和子对象“InvoiceItems”。
除了“OrderItems”之外,其他所有内容都加载,“OrderItems”是“Order”的直接子节点,但也映射到“InvoiceItems”。通过在此上下文中引用“InvoiceItems”来访问它们。
这显然是因为“OrderItems”距离“Invoice”对象两个级别,通过Invoice.InvoiceItems.OrderItem访问,其中加载选项中指定的其他属性直接映射到Invoice。
如何将对象加载到距离目标对象2个级别?
我希望这是有道理的。
using (var dc = new ProjDataContext(Config.ConnectionStringERPDB))
{
if (loadObjectGraph)
{
var loadOptions = new DataLoadOptions();
loadOptions.LoadWith<Invoice>(x => x.InvoiceItem);
loadOptions.LoadWith<Invoice>(x => x.Order);
loadOptions.LoadWith<InvoiceItem>(x => x.OrderItem);
loadOptions.LoadWith<OrderItem>(x => x.Product);
dc.LoadOptions = loadOptions;
}
Invoice invoice = (from c in dc.Invoice
where c.ID == invoiceID
select c).FirstOrDefault();
return invoice;
}
答案 0 :(得分:2)
您似乎无法从我找到的其他信息中加载多个级别。
我添加了一段非常脏的额外代码来填充我需要访问的属性。
这可能不是一个很好的解决方案 - 欢迎任何投入!
//渴望加载abover仅适用于一个级别
// http://stackoverflow.com/questions/1191331/using-linq-to-sql-how-do-i-eager-load-all-child-and-any-nested-children-results
// http://www.lowendahl.net/showShout.aspx?id=190
if (loadObjectGraph)
{
foreach (InvoiceItem invoiceItem in invoice.InvoiceItem)
{
var ii = invoiceItem;
OrderItem oiList = (from oi in dc.OrderItem
where oi.ID == ii.OrderItemID
select oi).FirstOrDefault();
invoiceItem.OrderItem = oiList;
}
}