1

古いバージョンの Entity Framework を長い間使用しているプロジェクトがありますが、(最初にデータベースを使用して) データベース スキーマを更新する必要があったため、Visual Studio 2013 は私を EF 5 にアップグレードすることにしました (現在はアップグレードしました)。 EDMX ファイルを変更したときに EF 6) に。

以前使用していたエンティティ フレームワークでは、遅延読み込みは機能していないように見えましたが、コレクションまたはオブジェクトで .Load() を呼び出してデータベースから読み込むことができました。

たとえば、これは古い EF で機能します。

public ICollection<CategoryItem> LoadedCategoryItems
{
      get
      {
    CategoryItems.Load();
        return CategoryItems;
      }
}

EF 5/6 では、CategoryItems のカウントが 0 になるため、遅延読み込みが機能しないようです。

public ICollection<CategoryItem> LoadedCategoryItems
{
    get
    {
        return CategoryItems;
    }
}

これは、次のようなことをする以外にロードを強制する方法ではないようです:

database.CategoryItems.Load();

どういうわけかプリロードすることで回避できますが、データベースに多対多の関係があり、この方法でプリロードする方法がわからないため、非常に行き詰まり、それ以上進むことができません。

クラスのコードは edmx ファイルによって作成された t4 テンプレートによって生成されるため、間違いなく仮想です。

public virtual HashSet<CategoryItem> CategoryItems { get; set; }

オブジェクトを含むクラスは動的プロキシであり、遅延読み込みがオンになっています。

だから、遅延読み込みが機能しない理由や、それをデバッグして理由を見つける方法がわかりませんか?

どうすれば何が起こっているのかを知ることができますか?

ありがとう、ステファン

4

1 に答える 1

0

歴史的な理由 (遅延読み込み前) から、EDMX で生成されたコードの一部はプライベート ゲッターを使用していました。これは遅延読み込みでできることではないため、これらはすべて public getter に変更する必要がありました

于 2013-10-26T20:51:14.713 に答える