私は MVC で Entity Framework 4 を使用しており、コントローラー メソッドが戻る前にビューで使用したい参照エンティティが読み込まれていることを確認する必要があります。
ObjectContext インスタンスは破棄されており、接続を必要とする操作には使用できなくなりました。
コンテキストから直接選択する場合は、Include(string)
メソッドを使用して、生成された SQL クエリにそれらを強制的に含めることができます。
var sellers = context.Sellers.Include("Recommendations.User").ToList();
ただし、(たとえば) エンティティを受け入れ、すべてのアイテムを読み込む必要があるヘルパー メソッドがある場合、Include
使用できるメソッドはありません。
void Test(Seller seller)
{
// ensure all recommendations and their users are loaded
}
ブルート フォース アプローチは、それらをループすることです。
foreach (var recommendation in seller.Recommendations)
recommendation.User.ToString(); // just force a load
推奨事項が 100 件ある場合、バックグラウンドで 101 件の SQL クエリが作成されます。理想的には、SQL への 1 回の旅行ですべてのRecommendation
ANDオブジェクトをロードするメソッド/アプローチが必要です。User
私にお金をみせて。
編集これが良いアーキテクチャか悪いアーキテクチャかについて議論することにあまり興味がありません。質問のためにシナリオを単純化しました。私が求めていることを EF API で実行できますか?
編集2
Ladislav の編集は、新しいアプローチへの希望をもたらしましたが、私はまだそこまで進んでいないようです。
私はこれを介して私が望むものを達成することができます:
context.Sellers.Include("Recommendations.User").Single(s => s.Id == seller.Id);
このアプローチは使用できませんLoadProperty
...
context.LoadProperty(seller, "Recommendations.User");
...エラーで失敗するため...
指定されたナビゲーション プロパティ Recommendations.User が見つかりませんでした。
コンテキストへの参照がない場合、これらのアプローチはどちらも機能しません。