[解決済み] Entity Framework Code First - Fluent ApiとData Annotationsのメリット・デメリット【終了しました
質問
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はシンプルなアプリケーションのために必要なものです。
関連
-
[解決済み] 不変量名 'System.Data.SqlClient' を持つ ADO.NET プロバイダに対応する Entity Framework プロバイダが見つかりませんでした。
-
[解決済み] Entity FrameworkとLINQ to SQLの比較
-
[解決済み] EFのマイグレーション。最後に適用したマイグレーションをロールバックしますか?
-
[解決済み] エンティティ・フレームワーク・マイグレーションをリセットする
-
[解決済み] [Solved] Webリクエストごとに1つのDbContext...なぜ?
-
[解決済み】Entity frameworkの1:1リレーションシップにおけるアソシエーションの主端とは?
-
[解決済み】Entity Frameworkと接続プーリング
-
[解決済み] Entity Framework - やり直し - すべての移行を元に戻す/ロールバックする
-
[解決済み] キーワードはサポートされていません。"データソース" Entity Framework Contextの初期化
-
[解決済み] EF Core の EntityTypeBuilder に ToTable の定義が含まれていない。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 不変量名 'System.Data.SqlClient' を持つ ADO.NET プロバイダに対応する Entity Framework プロバイダが見つかりませんでした。
-
[解決済み] Entity Frameworkで複数行を削除する方法(foreachを使用しない)
-
[解決済み] Entity Framework: "ストアの更新、挿入、または削除ステートメントが予期しない行数 (0) に影響しました。" [クローズド]。
-
[解決済み] Entity Framework - やり直し - すべての移行を元に戻す/ロールバックする
-
[解決済み] EF Code First "Invalid column name 'Discriminator'" but no inheritance.
-
[解決済み] EF 5 Code First Migrationsから完全なSQLスクリプトを生成する
-
[解決済み] Symfony2で現在のユーザを表すエンティティを取得する方法は?
-
[解決済み] Entity Framework 4 / POCO - 何から始めるか?[クローズド]
-
[解決済み] Entity Frameworkのバージョンは?
-
[解決済み] Entity Framework Code First - Fluent ApiとData Annotationsのメリット・デメリット【終了しました