EntityFramework4.2を使用してオブジェクトグラフを作成したいと思います。
現在、ナビゲーションプロパティにICollectionを使用しているPOCOエンティティがあります。EntityCollectionやEF固有のものは使用しないようにします。
Includeを過度に使用することによって引き起こされる大規模な結合を避けたい。オブジェクトを指定して、そのナビゲーションプロパティにデータを入力し、別のデータベースクエリを作成します。
ICollectionに直接データを入力する方法はありますか?現在、私はこの問題を回避していますが、それは本当に苦痛です。
// grab the user, brand users and brands
User user = entities.Users
.Include(item => item.BrandUsers.Select(brandUser => brandUser.Brand))
.Where(item => item.Name == userName)
.SingleOrDefault();
// grab the pending share grants and brands
entities.Users
.Include(item => item.ToShareGrants.Select(shareGrant => shareGrant.Brand))
.Where(item => item.Id == user.Id)
.Load();
return user;
このアプローチについて私が気に入らないことの1つは、最上位オブジェクトを再クエリしていることです。これを行わないと、オブジェクトが返されないときにナビゲーションプロパティが設定されません(NULLのままになります)。たとえば、次のコードは、結果が返された場合にのみ機能します。
entities.ShareGrants
.Include(item => item.Brand)
.Where(item => item.ToUserId == user.Id)
.Load();
これらのタイプの関係を構築するためのエンティティフレームワークに、私が知らなかった方法があるかどうかに興味がありました。ナビゲーションプロパティを段階的に入力する簡単な方法を知っている人がいれば、コードサンプルをいただければ幸いです。