1. ホーム
  2. entity-framework

[解決済み] Entity Framework Code First - Fluent ApiとData Annotationsのメリット・デメリット【終了しました

2022-07-04 09:33:16

質問

Entity Frameworkのコードファーストでデータベースを作成する場合、データベースモデルの多くはコードから抽出することができます。Fluent APIおよび/またはAttributesは、モデルを微調整するために使用することができます。

データアノテーションと比較して、Fluent APIのメリットとデメリットは何ですか?言い換えると

Fluent APIとData Annotationの長所と短所を教えてください。

どのように解決するのですか?

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はより高度な機能であると考えられており より高度な機能であり データアノテーションを使用することをお勧めします。 を使用することをお勧めします。 を使用することをお勧めします。

しかし、私の意見では、DataAnnotationsの限界にすぐに到達します(おそらく非常に単純なオブジェクトモデルを除いて)。これ以上 DataAnnotations でモデルを微調整できない場合、最後の手段はデフォルトのマッピング規約に従うことです (それらのルールに従ってプロパティを命名することで)。現在のところ、規約を上書きすることはできません(無効にすることのみ可能です。MSは、将来のEFリリースで規約の設定オプションを提供すると発表しています)。しかし、オブジェクトモデルを定義するときにマッピング規約に強制されたくないのであれば、唯一の選択肢はFluent APIになります。

Fluent APIを学ぶことはほぼ必須であり、DataAnnotationsはシンプルなアプリケーションのために必要なものです。