我在使用ObjectContext.LoadProperty
(EF 4 Database First)时遇到了困难(字符串和表达式重载对我来说都表现出相同的行为)。给定以下简单模式:
Product
--------------
ProductId (pk)
...
Order
--------------
OrderId (pk)
...
OrderItem
--------------
OrderId (pk, fk Order),
ItemNumber (pk),
ProductId (fk Product)
...
因为我发现它比Includes
在我的特定场景中表现更好,所以我使用LoadProperty
它来填充相关实体。例如,
Order ord = context.Orders.Where(o => o.OrderId = 1).FirstOrDefault();
context.LoadProperty(ord, o => o.Items); // Items is the navigation property name for the
OrderItem -> Order relationship
foreach(var i in ord.Items)
{
context.LoadProperty(i, oi => oi.Product);
}
这已经存在了一段时间并且运行良好(如您所料)。然而,今天早上我们开始遇到一个场景,即使在调用之后LoadProperty
,i.Product
仍然为空。i.ProductId
是有效的,我什至可以像这样明确加载产品:
var product = context.Products.Where(p => p.ProductId == i.ProductId).FirstOrDefault();
但LoadProperty
不会加载对象。没有抛出异常,它只是不加载它。我也尝试过指定MergeOptions.OverwriteChanges
(即使没有),结果可以预见的是相同的。
什么可能导致ObjectContext.LoadProperty
以这种方式静默失败?