エンティティフレームワークコード最初:ナビゲーションプロパティの初期化ベストプラクティス
エンティティフレームワークコードを使用して開発する最初に、単純な古いCLRオブジェクト(POCOS)内のナビゲーションプロパティの初期化に関する疑問を提起することがよくあります。 これらのプロパティを無効化したままにすることを提唱する人もいれば、コンストラクターの初期化を提案する人もいます。 この記事は、最良のアプローチを明確にしています
コレクションナビゲーションプロパティ:初期化は一般的に不要です
収集プロパティ(例:)の場合、初期化はビジネスロジックにほとんど追加されません。 空のコレクションの初期化は、本質的にエンティティアソシエーションを作成しません。 したがって、初期化は主にコーディングスタイルの問題です
IList<Order>
怠zyな初期化は、ヌル参照の例外を防ぎ、テストを簡素化することができます。逆に、初期化なしで自動実装プロパティを使用すると、ボイラープレートコードが最小限に抑えられ、C#のヌルコンディショナル演算子をレバレッジします。 ただし、明示的な読み込みにより、初期化されたコレクションは、エンティティフレームワークがデータをロードしたかどうかを判断することを複雑にすることができることに注意してください。
参照ナビゲーションプロパティ:初期化を避けます
参照ナビゲーションプロパティの初期化(例えば、)は強く推奨されています。 デフォルト値を割り当てる(新しい空のオブジェクトのように)、予測不可能な動作につながる可能性があります。
コンストラクターで初期化された場合、エンティティフレームワークは、オブジェクトのマテリアル化または怠zyな負荷中にこれらの値を無効にしません。 これにより、空のエンティティを節約したり、関係管理を混乱させたりする可能性があります。Customer
エンティティフレームワークコア考慮事項
エンティティフレームワークコア(バージョン2.1以降)は、関係の修正を異なって処理し、初期化された参照プロパティによって直接影響を受けるものではありませんが、レイジーロードはまだ上書きされません。 さらに、初期化は
クエリとシードに干渉する可能性があります。
推奨Include
HasData
最適なエンティティフレームワークコードの最初の開発については、参照ナビゲーションプロパティの初期化を避けてください。 収集ナビゲーションプロパティの場合、初期化は個人の好みとプロジェクトのニーズに基づいてオプションですが、一般的には不要です。 このアプローチにより、エンティティフレームワークバージョン全体で予測可能な動作と互換性が保証されます。
以上がEF CodeFirstナビゲーションプロパティ:初期化するかどうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。