2012-03-13 8 views
12

レイジー読み込みと変更の追跡を使用する必要がある場合は、プロキシが使用されていると読んでいます。つまり、Lazy Loadingを使用するには、プロキシを有効にする必要があります。EF 4 - プロキシを使用しないレイジー読み込み

これまでのところとても良いです。

ポイントは、私がプロキシを使用しないコンテキストをセットアップするためにコードを使用することができ、まだ遅延ロードを使用することです。

ctx = new SchoolEntities(); 
ctx.ContextOptions.ProxyCreationEnabled = false; 
ctx.ContextOptions.LazyLoadingEnabled = true; 

ProxyCreationEnabledプロパティは、トラッキングプロキシの変更のみに関連していますか、何か不足していますか?

誰か詳細を説明してください。

ありがとうございます! - 私POCO/DbContextを使用していない

EDIT1

。私はObjectContextで通常のedmx EFモデルを使用しています。私は、POCOエンティティがトラッキングと遅延ロードを変更することに関して、プロキシの重要性を知っています。通常のEDMXモデルでプロキシを使用する理由

答えて

10

Entity Frameworkの組み込み機能でPOCOエンティティを使用する場合、遅延ロードを使用するにはプロキシの作成を有効にする必要があります。したがって、POCOエンティティでは、ProxyCreationEnabledがfalseの場合、LazyLoadingEnabledがtrueに設定されていても遅延ロードは発生しません。

特定のタイプのレガシーエンティティ(特にEntityObjectから派生したエンティティ)では、そうではなく、ProxyCreationEnabledがfalseに設定されていても遅延読み込みが機能します。しかし、EntityObjectエンティティを使用する必要があるという意味ではありません。

ProxyCreationEnabledフラグは、通常、EFがプロキシを作成しないようにする場合にfalseに設定されます。これは、実行しているシリアライゼーションのタイプに問題が発生する可能性があるからです。

LazyLoadingEnabledフラグは、通常、プロキシが問題ないと判断した場合にコンテキスト全体で遅延ロードを実行するかどうかを制御するために使用されます。たとえば、変更追跡にはプロキシを使用し、遅延ロードは無効にすることができます。

+0

「EntityObject」は「レガシーエンティティ」であることを覚えておきましょう。いつ、それを '[Obsolete]'属性でマークし始めますか? – Slauma

+0

良い質問です。それが起こるかどうかわからないので、私は答えることができません。しかし、我々はそれについて議論した。 –

+0

@ajcvickers、あなたの返事をありがとう、私は正しく理解しない限り、私はObjectContextを(とDbContextではない)を使用している場合、ProxyCreationEnabledは何のために使用される質問の最も重要な部分を見逃したと思いますか?変更トラックを有効にするには?前に述べたように、これはレイジーローディングではないので、それは何のためですか? – outlookrperson

関連する問題