Entity Frameworkコアナビゲーションプロパティのオーバーヘッドロード

c# entity-framework-core npgsql

質問

私はEFコア(NPGSQLを使用)で遊ぶようになったばかりで、ナビゲーションプロパティが「インクルード」を明示的に使わずにロードされているかどうか不思議な挙動をしています。私が見ている例:

ObjectA

ObjectA->リストObjectB | ObjectA->リストObjectC

ObjectB->リストObjectD

すべてのナビゲーションプロパティが設定され、データベースに各タイプの項目があります。

私はObjectAのクエリを任意のインクルードなしで実行するので、navプロパティは空でなければなりません。そうではありません。クエリーに応じて、明示的なインクルードなしでそれらのうちの1つが入力されることがあります(両方ともではなく、ObjectBまたはObjectCのみ)。明示的なインクルードを行うと、両方とも期待通りに表示されます。これは迷惑ですが、私が見ている本当に悪い問題ではありません。

私はObjectCを照会します。すべてのnavプロパティが設定されている場合、ObjectAは期待どおりにロードされますが、ObjectAにはそのすべてのnavプロパティもロードされます。 ObjectCに関連するものだけでなく、 ObjectAのすべての子(およびその子)も同様に戻ってきます。これにより、要求されたものとはまったく関係のない何百ものアイテムが戻ってきます。

これはコードファーストです(私はNPGSQLの足場が非常にバギーなので、手でDBを作成しています)。次に、自分のエンティティの1つに対して親関係がどのようにモデル化されているかの例を示します。

entity
  .HasOne<User>(c => c.User)
  .WithMany(p => p.Addresses)
  .HasForeignKey(c => c.UserId)
  .OnDelete(DeleteBehavior.Restrict)
  .HasConstraintName<User, Address>("fk_addresses_user");

私は単一のアドレスを照会すると親のユーザーが引き戻されますが、その下のすべての他の単一のアドレスもユーザーに結び付けられます(これは単一のレベルの関連ですが、アドレスに子があれば、 。

私は今失っている。私ができることは、モデルからすべての子ナビゲーションプロパティを削除することだけです。

人気のある回答

私は「今は何をしているのか分かっていると思う。それはすでにローカルにトラッキングされている他のプロパティを含む自動です(これは理にかなっています)。私のテスト私は一度にいくつかのアイテムを読み書きしていましたが、明示的なインクルードなしで記入されているものが混乱していました。より多くのテストを行った後、同じコンテキストで他のエンティティにアクセスしない単純なクエリがある場合は、期待通りの動作をします



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ