0

すべてのエンティティを熱心にロードするように DbContext を構成する方法はありますか? 私たちは試みました:

        Configuration.LazyLoadingEnabled = false;
        Configuration.ProxyCreationEnabled = false;

ProxyCreationEnabled をオフにした場合とオフにした場合の両方を試しました。

たまたま、ロードしている DB がそれほど大きくなく、頻繁に変更されず、頻繁に参照されていることを知りました。したがって、すべてをメモリに保持することは非常に有利です。

4

2 に答える 2

4

いいえ、LazyLoadingEnabled無効は「EagerLoadingEnabled」を意味しません。それは、「遅延読み込みも有効になっておらず、明示的に要求された読み込みのみです」です。EF コンテキストが自動的に熱心な読み込みを行うことはありません。エンティティと大規模なデータベースの間の多くの関連付けで何が起こるか考えてみてください。

メソッドを使用してローカル エンティティのみにアクセスしない限り、すべてをコンテキストにプリロードしてもあまりメリットはありません。DbSet.Localまたはでローカル エンティティにアクセスできますDbSet.Find

DbSet(like ) にアクセスするだけで、context.Customersとにかくデータベース クエリが実行されます。遅延読み込みが無効になっている場合、ナビゲーション プロパティにローカル エンティティを使用できますが (リレーションシップ フィックスアップと呼ばれます)、それ以外の場合は、ナビゲーション プロパティにアクセスするとデータベース クエリも発生します。

コンテキストを使用してデータベースからオブジェクト グラフを生成し、コンテキストの外部にキャッシュする必要があるようです。データを読み取り専用でフェッチする場合は、AsNoTracking拡張メソッドを使用することができます。(のようにcontext.Customers.AsNoTracking())。

于 2013-03-27T20:56:00.937 に答える
0

いいえ...しかし、大量のデータを EF DbContext にロードする最もパフォーマンスの高い方法を探している場合は、複数の結果セット (エンティティの種類ごとに 1 つ) を返すストアド プロシージャを作成することをお勧めします。エンティティがコンテキストに読み込まれると、EF は自動的に nav プロパティをフックします。

DBファーストとコードファーストの両方の観点からそれを行う方法についての説明は次のとおりです。

http://msdn.microsoft.com/en-us/data/jj691402.aspx

于 2013-03-27T18:30:30.813 に答える