2

EF4を使用しており、クラスでSystem.Data.Entitydllを使用しています。ただし、エンティティのナビゲーションプロパティのloadメソッドが表示されません。

このメソッドにアクセスするにはどうすればよいですか?

私が行っているのは、.NETのe 4.0プロジェクトを作成し、データベースからedmxを作成し、モデルedmxを右クリックして、DBContextを生成することです。

ただし、EF4の機能であると思う、コンテキストのローカルプロパティにアクセスできます。

ありがとう。ダイムロック。

4

2 に答える 2

11

このDbContextアプローチでは、IsLoadedプロパティとLoadメソッドが移動されました。

context.Entry(yourEntity)
   .Collection(entity => entity.NavigationProperty)
   .IsLoaded;

context.Entry(yourEntity)
   .Collection(entity => entity.NavigationProperty)
   .Load();
于 2012-11-13T18:00:09.287 に答える
0

クエリを作成するとき(これはすべてラムダ構文でも機能します)

From a in context.EntitySet.Include("Navigation Property NAme")
select a

そして、すべてがそこにあります;)..ナビゲーションプロパティが入力されるポイントまで..以上。

ただし、多くの結合で奇妙になる可能性があります

あなたもすることができます

From a in context.EntitySet.Include("Navigation1.Navigation2.Navigation2")
                           .Include("SomeOtherNavigation")
    select a

ここで、navigation1とSomeOtherNavigationは、エンティティセットのナビゲーションプロパティです。

コンテキストで遅延読み込みをオンにできない場合。しかし、その邪悪なイモ。また、リポジトリの遅延読み込みについて知る前に含める必要があるため、SOAアプローチを採用する場合は実際にはうまく拡張できません。

つまり、リポジトリでクエリを実行し、サービスを介してデータを送信してから、フロントエンドのナビゲーションプロパティが必要になります...その時点では遅延読み込みには遅すぎます...たとえば、使用していないwcfサービスを使用していますデータサービスを使用します。

EntitySetでIncludeを使用する必要があることに注意してください。これは、IQueryable<>ではありません。

実際の例:

   var csg = from ucsg in c.UserCarShareGroups.Include("UserCarShareGroups.User.UserVehicles")
                      where ucsg.User.UserName.ToLower() == userName.ToLower()
                      && ucsg.CarShareGroup.Carpark.Name.ToLower().Equals(carparkName.ToLower())
                      && ucsg.DeletedBy == null
                      select ucsg.CarShareGroup;

(データベースには、何らかの理由で大文字と小文字が区別される照合があります)

別のアプローチ(そしておそらくもっと関連性のあるものはここにあります) Entity Framework-.Load()の問題

しかし、それは明白であり、何が引き出されているかを正確に知っているので、私はそれを私が言ったように行うのが好きです。特に大きなデータセットを扱う場合。

私の懸念とLoad()を組み合わせた質問への回答は、次のとおりです 。EntityFramework4のロードとインクルードの組み合わせ

于 2012-11-13T17:43:05.950 に答える