コンテキストがその直後に破棄されるため、関連するすべてのエンティティ (->1 FK と ->N FK の両方) を積極的にロードする必要があるコードに特定のクエリがあります。
params Expression<Func<MyItem, object>>[] includes
それらを取り、内部でチェーンする一般的な「クエリ」メソッドを作成しました。その部分はうまく機能します。
クエリは次のようになります。
var item = facade.Query<MyItem>(
c => c.Childs.Select(x => x.Parent),
c => c.Childs.Select(x => x.SubChild1),
c => c.Childs.Select(x => x.SubChildNotWorking),
c => c.Childs.Select(x => x.SubChild2),
c => c.Childs.Select(x => x.SubChild3),
c => c.Childs.Select(x => x.SubChildrens)
).FirstOrDefault(c => c.Name == name);
動作していないプロパティのマッピング (SubChildNotWorking の構成に配置):
this.HasMany(scnw => scnw.Childs).WithOptional(c => c.SubChildNotWorking).HasForeignKey(c => c.MyForeignKey);
すべてのインクルードのうち、SubChildNotWorking
実際には機能しないのは だけです。返されたオブジェクトをデバッガーで調べると、すべてのプロパティにプロキシが表示されます。プロキシを開くと、他のすべての関係の正しいデータと、プロパティの「オブジェクトコンテキストは既に破棄されています」という例外が表示されSubChildNotWorking
ます。
私が見つけた唯一の違いSubChildNotWorking
は、null 許容 FK (DB の null 許容列と dbcontext の WithOptional 構成) であるのに対して、他のすべては WithRequired で構成された null 非許容 FK であるということです。
データベースも、Code First で作成されていない従来の DB であり、その規則に従っていません。DbContext でマッピングを作成しただけです。他のすべては正常に動作します。
Null 許容 FK で熱心な読み込みが機能しないかどうかを調べようとしていますが、それに関するドキュメントが見つかりませんでした。
それはバグですか、それとも意図した動作ですか? しかし、何よりも、どうすればこれを解決できますか?
ありがとう。