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
がまだ null であるというシナリオに遭遇し始めました。i.ProductId
有効であり、次のように製品を明示的にロードすることもできます:
var product = context.Products.Where(p => p.ProductId == i.ProductId).FirstOrDefault();
しかしLoadProperty
、オブジェクトをロードしません。例外はスローされず、単にロードされません。私も指定しようとしましたがMergeOptions.OverwriteChanges
(何もありませんが)、結果は予想通り同じでした.
ObjectContext.LoadProperty
このようにサイレントに失敗する原因は何ですか?