このメソッドは、poco(通常の古いCLRオブジェクト)のナビゲーション属性を初期化しません:
メソッド2:コンストラクターで初期化このメソッドは、Pocoのコンストラクターのナビゲーション属性を初期化します:
<code class="language-csharp">public class User { public int Id { get; set; } public string UserName { get; set; } public virtual ICollection<Address> Addresses { get; set; } public virtual License License { get; set; } }</code>
コレクション属性(アドレスなど)の場合、メソッド1とメソッド2の機能1と方法に違いはありません。初期化はビジネスロジックに影響しません。
参照属性(ライセンスなど)の場合、使用することはお勧めしません。空のエンティティや部分ロードされたエンティティなどの予期しない動作をデータベースに保存する可能性があります。質問2:ナビゲーション属性の方向を決定する方法は?
<code class="language-csharp">public class User { public User() { this.Addresses = new List<Address>(); //this.License = new License(); //对于引用属性,不建议初始化 } public int Id { get; set; } public string UserName { get; set; } public virtual ICollection<Address> Addresses { get; set; } public virtual License License { get; set; } }</code>
ユーザーとライセンスの2つのウェイ関係では、両方のクラスが互いのナビゲーション属性を初期化する場合、スタックオーバーフローが発生する可能性があります。これを回避するには、ナビゲーション属性の1つを削除する必要があります(この例では、サブエンティティの属性を削除する必要があります。この決定は、ビジネスルールと関連する方向に基づいている必要があります。 利点と短所は
と比較されます。
メソッド1(初期化ではありません):利点:
空のエンティティまたは部分的にロードされた部分の保存を防ぐエンティティ
空の参照異常を避けます 読み込みを遅らせるのは簡単です
短所:
明示的にロードする必要がある場合に短い値チェックの場合は 関係の修復を防ぐことはできません
簡略化されたコレクション管理 短い参照異常はありません
関係の修復を防ぐことはできません
ef coreのインクルードとシードデータの問題につながる可能性があります要するに、参照ナビゲーション属性については、設定ナビゲーション属性の間に大きな違いはありません。 選択する方法は、特定のビジネスニーズとプロジェクト構造に依存します。
以上がEFコアのナビゲーションプロパティを初期化するかどうか:どのアプローチが最適ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。