0

これは私の POCO エンティティのシナリオです。

Manufacturer(1) はCars(*)を持っています

1 つのCarエンティティには、エンティティへのナビゲーション プロパティがありManufacturerます。

1 つのManufacturerエンティティに Cars コレクションへのナビゲーション プロパティがあります

指定されたすべてCarsの色をそれぞれのでクエリする必要Manufacturerがあるため、EF クエリは次のようになります。

Context.Cars.Where(i=>i.Color=='White').Include("Manufacturer").ToList();

これは私が得るものです: のリストCarsManufacturer正しく入力された

問題は、Manufacturerエンティティがナビゲーション プロパティCarsも設定されていることです。

Cars.FirstOrDefault().Manutefacturer.Cars車がいっぱい……。

この望ましくない動作を取り除くにはどうすればよいですか?

どうもありがとう。

更新 #1: 次のプロパティが設定されています。

this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
4

2 に答える 2

1

Cars.FirstOrDefault().Manufacturer.Cars問題は、Manufacturer エンティティがナビゲーション プロパティ Cars populated as well: is full of cars....をもたらすこと です。

はい、でも白い車だけ...

Cars読み込まれた各メーカーのコレクションを要求するのは、データベース クエリの追加の結合ではありません。ただし、クエリにロードした車 (白い車) だけが、それぞれのメーカーのコレクションに追加されます。Entity Framework コンテキストは、読み込まれたデータがエンティティに実体化されるときにこれを行います。これは関係修正と呼ばれ、無効にすることはできません。最近、同様の質問と回答がありました。

于 2013-05-23T18:13:21.957 に答える
0

遅延読み込みが有効になっているように思えます。これにより、最初にアクセスしたときにデータベースからナビゲーション プロパティが自動的に読み込まれます。

DbSetコンストラクターで全体に対して無効にすることができます。

public MyContext() : base()
{
  this.Configuration.LazyLoadingEnabled = false;
}

次に、手動でロードしたナビゲーション プロパティのみがInclude()表示されます。

Carsとはいえ、プロパティにアクセスしている場合は、値を設定する必要がありますね? それにアクセスしていない場合、そもそも遅延読み込みは行われません。

于 2013-05-23T14:14:01.747 に答える