Entity Framework コード ファーストを使用してデータベースを作成する場合、多くのデータベース モデルをコードから抽出できます。Fluent API および/または属性を使用して、モデルを微調整できます。
データ注釈と比較した Fluent Api の長所と短所は何ですか? 言い換えれば、特定の状況で両方の方法を使用できる場合でも、どのような場合に一方の方法が他方より優先されるのでしょうか?
Entity Framework コード ファーストを使用してデータベースを作成する場合、多くのデータベース モデルをコードから抽出できます。Fluent API および/または属性を使用して、モデルを微調整できます。
データ注釈と比較した Fluent Api の長所と短所は何ですか? 言い換えれば、特定の状況で両方の方法を使用できる場合でも、どのような場合に一方の方法が他方より優先されるのでしょうか?
DataAnnotations で設定できることはすべて、Fluent API でも可能です。逆は当てはまりません。したがって、構成オプションと柔軟性の観点からは、Fluent API の方が「優れている」と言えます。
Fluent APIでは可能ですが、DataAnnotationsでは不可能な構成例(完全なリストではないことは確かです)(私が見る限り):
カスケード削除をオフにします。
.WillCascadeOnDelete(false)
オブジェクト モデルでキーが公開されていない場合は、データベースで外部キーの列名を指定します。
.Map(conf => conf.MapKey("MyForeignKeyID"))
特にオブジェクト モデルで関連付けの一方の側のみが公開されているすべての場合に、関係をきめ細かく調整します。
.WithMany(...)
、WithOptional(...)
、WithRequiredDependent(...)
、WithRequiredPrincipal(...)
オブジェクト モデルとデータベース テーブル間の継承マッピングの仕様 (Table-Per-Hierarchy、Table-Per-Type、Table-Per-Concrete-Class):
.Map<TDerived>(Action<EntityMappingConfiguration<TDerived>> ...)
編集:MicrosoftはFluent APIを「高度な機能」と見なしています(ここから引用):
流暢な API はより高度な機能と見なされ、流暢な API を使用する必要がある場合を除き、データ注釈を使用することをお勧めします。
しかし、私の意見では、DataAnnotations の限界にすぐに到達します (おそらく非常に単純なオブジェクト モデルを除く)。モデルを DataAnnotations で微調整できなくなった場合、最後の手段はデフォルトのマッピング規則に従うことです (これらの規則に従ってプロパティに名前を付ける)。現在、規則を上書きすることはできません (無効にするだけです。MS は、将来の EF リリースで規則の構成オプションを提供することを発表しました)。しかし、オブジェクト モデルを定義するときにマッピング規則に縛られたくない場合、唯一の選択肢は Fluent API です。
Fluent API を学習することはほぼ必須であり、DataAnnotations は単純なアプリケーションにとって便利です。