質問: 私はEF Coresが所有しているオブジェクトと、特定のデータの塊をいつロードするかを制御する方法を私の頭の周りでラップしようとしています。 基本的に私はたくさんの古いレガシーテーブル(〜150カラムあり)を持っていて、より良いセグメンテーションと特定の機能性を達成するためにテーブルごとにルートエンティティといくつかの所有オブジェクトを使ってそれらをモデル化したいです。例:基礎となるテーブルの最も重要なフィールドの〜20のプロパティを含む "article"エンティティがあります。そのエンティティには、OwnedObject "StorageDetails"も含まれています。これには、さらに数十個のフィールド(およびその他のものの格納に関連する機能)が含まれています。 問題:所有しているオブジェクトをすぐにロードするかどうかを制御する方法が見つかりません。それらのいくつかのために私はInclude()を使用してそれらを明示的にロードすることを好むでしょう... ``` public class Article : EntityBase { public string ArticleNumber { get;set; } // Owned object, shares article number as key. public StorageDetails StorageStuff { get; set; } // An Entity from another table having a foreign key reference public SomeOtherEntity OtherStuff { get; set; } } public class StorageDetails : OwnedObject { public Article Owner { get; set; } } // Somewhere during model creation ... builder.OwnsOne(article => article.StorageStuff); builder.HasOne(article => article.OtherStuff ) ... ``` OwnsOneでモデルを定義して記事をロードすると、すぐにStorageStuffがロードされます。 OtherThingをロードするには、クエリでInlcude()する必要があります。これは基本的に、所有しているオブジェクトに対して達成したいことです。 それは可能ですか?そうでない場合は、他にどのようなアプローチを私に指摘できますか?
回答: 所有型の場合 - この動作は "仕様による"ため、(現在は)不可能です。そして、EFコアドキュメントの所有型の問い合わせセクションに文書化されています。 > 所有者に問い合わせるとき、所有タイプはデフォルトで含まれます。所有タイプが別のテーブルに格納されている場合でも、Includeメソッドを使用する必要はありません。 > > 「デフォルトで」と言うのは少々あいまいですが、オプションや`Exclude`メソッドがないので、安全に「常に」と読むことができます。 現在、関連データのロードを制御する唯一の方法は*実際の*エンティティへのナビゲーションプロパティであるため、「実際のエンティティ」を制御するタイプを作成します。 テーブル分割のあるエンティティ」 > 主キー列が共有され、各行が2つ以上のエンティティに対応する同じテーブルに、2つ以上のエンティティタイプをマップすることが可能になりました。 > > テーブル分割を使用するには、テーブルを共有するすべてのエンティティタイプ間で識別関係(外部キープロパティが主キーを構成する場合)を設定する必要があります。 > >