SalesRep と Customer という 2 つのエンティティがあります。My Customer には OEM SalesRep と Direct SalesRep があるため、次のような 2 つの外部キーがあります。
public int OemRepId { get; set; }
[ForeignKey("OemRepId")]
public SalesRep OemRep { get; set; }
public int DirectRepId { get; set; }
[ForeignKey("DirectRepId")]
public SalesRep DirectRep { get; set; }
私のコンテキストでは、遅延読み込みを無効にしました (プロパティは仮想ではありません)。プロジェクト全体で明示的な読み込みを強制したい。コンテキストのコンストラクターで LazyLoading を無効にする方法を次に示します。
this.Configuration.LazyLoadingEnabled = false;
これで、コンテキストから顧客プロパティを受け取ると、OemRep と DirectRep の両方が正しい NULL になります。
次に、次のように OemRep を明示的にロードできます。
//I already have my CurrentCustomer entity loaded with its OemRep and DirectRep both NULL
_ctx.Entry(currentCustomer).Reference(c => c.OemRep).Load();
この行の直後にコードを挿入すると、OemRep 参照プロパティが読み込まれていることがわかります。これがバグです。
OemRepId と DirectRepId が同じである場合、OemRep と DirectRep の両方の参照プロパティが設定されます。それらが異なる場合は、次のように両方を明示的にロードする必要があります。
_ctx.Entry(currentCustomer).Reference(c => c.OemRep).Load();
_ctx.Entry(currentCustomer).Reference(c => c.DirectRep).Load();
明示的にロードしていないのに DirectRep が入力されるのはなぜですか?