0

EF5 DbContext を使用した後に構成を変更すると、EF5 DbContext に問題が発生します。POCO T4 テンプレートを使用しています。シナリオは次のとおりです。

  • コンテキスト内でセットをクエリし、動的プロキシ オブジェクトとそれらの関係を取得します
  • 次のように、コンテキストの構成を変更して、動的プロキシと遅延読み込みを無効にします。

    context.Configuration.ProxyCreationEnabled = false;
    context.Configuration.LazyLoadingEnabled = false;
    
  • 次に、セットに対して再度クエリを実行し、プロキシとリレーションで同じ種類の結果を取得します。

コンテキストが初期化された後、構成を考慮に入れるために何をする必要がありますか? 出来ますか?

前もって感謝します!

4

1 に答える 1

2

セットをクエリし、プロキシの作成を無効にして、同じセットを再度クエリすると、とにかくプロキシされたエンティティを取得する可能性が高くなります。その理由は、コンテキスト内で内部的に使用されるIDマップです。各エンティティは、コンテキストによって1回だけ追跡できます。したがって、プロキシ作成を有効にしてセットをクエリすると、EFは、データベースからロードされたすべての一意のレコードに対して、動的プロキシを使用してエンティティインスタンスを作成します。プロキシの作成を無効にした後でセットを再度クエリすると、EFはすでに作成されているすべてのエンティティ(プロキシを含む)を再利用し、まだロードされていないレコードに対してのみ動的プロキシなしで新しいエンティティを作成します。

これらのプロキシを避けたい場合は、次のいずれかを行う必要があります。

  • 最初のクエリの前にプロキシの作成をオフにします
  • 2番目のクエリに新しいコンテキストを使用する

使ってみるのもいいのですがAsNoTracking()、うまくいかないのではないかと思います。

于 2013-02-19T09:04:14.080 に答える