0

Order エンティティと OrderItem エンティティがあり、複数の注文の詳細 (アイテムを含む) を一度に取得しようとしているとします。

.Include次のように使用して、Order と OrderItem の詳細を一緒に取得できます。

var orders = db.Orders
               .Include(o => o.OrderItem)
               .Where(o => orderIds.Contains(o.Id));

でも、動かないから使えないとしよ.Includeう。

代わりに、次のように、すべての Orders を取得してから、すべての OrderItems を取得することができます。

var orders = db.Orders.Where(o => orderIds.Contains(o.Id));

var orderItems = db.OrderItems.Where(i => orderIds.Contains(i.OrderId));

これにより、すべての Orders と (個別に) 関連するすべての OrderItems が得られます。しかし、ナビゲーション プロパティが正しく機能するように、OrderItemオブジェクトを関連オブジェクトに「アタッチ」するにはどうすればよいでしょうか。Order

(つまり、既に取得したものを使用するのではなく、EF がデータベースからデータをフェッチすることなく、確実に動作order.OrderItemsするようにするにはどうすればよいでしょうか)。orderItem.Order

4

2 に答える 2

0

この質問を締めくくるために、私がやったこと/学んだことは次のとおりです。

1) Slauma がコメントで指摘したように、OrdersOrderItemsは別々に取得されますが、EF は実際にはナビゲーション プロパティを修正します。たとえば、各 OrderItem の Order プロパティが正しい を正しく指すようにしますOrder

2) 残念ながら、EF は注文のすべてOrderItemsフェッチされたことを知る方法がないため、Order.OrderItemsナビゲーション プロパティが遅延読み込みされている場合、そのプロパティにアクセスすると、EFOrderItemはデータベースからすべてのデータを再フェッチします。これは ごとに 1 回行われますOrder。明らかに良くない。

3) 上記の問題を回避する唯一の方法は、そのコレクション プロパティ (および他の同様のコレクション - 1 対 1 のナビゲーション プロパティはこの問題の影響を受けません) の遅延読み込みを削除することです。

于 2013-08-21T11:22:48.240 に答える