1. ホーム
  2. entity-framework

[解決済み] コードファーストとモデル・データベースファーストの比較【終了しました

2022-03-15 19:04:10

質問

EDMXダイアグラムでEntity Framework 4.1のコードファーストとモデル/データベースファーストを使用することの長所と短所は何ですか?

EF4.1を使ってデータアクセスレイヤーを構築するためのすべてのアプローチを完全に理解しようとしています。私は、Repositoryパターンと IoC .

コードファーストのアプローチで、エンティティやコンテキストを手作業で定義し、その上で ModelBuilder を使用してスキーマを微調整します。

を作成することもできますね。 EDMX ダイアグラムを作成し、T4テンプレートを使用するコード生成ステップを選択すると、同じように POCO クラスがあります。

どちらの場合も、最終的に POCO オブジェクトを作成します。 ORM に由来するコンテキストがあります。 DbContext .

データベースファーストは、Enterprise Managerでデータベースを設計し、モデルをすばやく同期させ、デザイナーを使って微調整できるため、最も魅力的だと思われます。

では、この2つのアプローチの違いは何でしょうか?VS2010とEnterprise Managerの好みの違いだけでしょうか?

解決方法は?

という違いがあると思います。

コードが先

  • ハードコアなプログラマーはデザイナーを嫌うし、EDMX xmlでマッピングを定義するのは複雑すぎるので、非常に人気があります。
  • コードの完全な制御(修正が困難な自動生成されたコードはありません。)
  • 一般的に期待されているのは、DBに煩わされないことです。DBはロジックを持たない単なるストレージです。EFが作成を担当し、それがどのように仕事をするのか知りたくはないでしょう。
  • データベースに対する手動での変更は、あなたのコードがデータベースを定義するため、おそらく失われるでしょう。

データベースが先

  • DBAが設計したDBがある場合、別途開発したDBがある場合、または既存のDBがある場合に非常に人気があります。
  • EFにエンティティを作成させ、マッピングを修正した後、POCOエンティティを生成することができます。
  • POCOエンティティに追加機能が必要な場合は、T4修正テンプレートを使用するか、パーシャルクラスを使用する必要があります。
  • データベースがドメインモデルを定義しているため、データベースへの手動変更が可能です。データベースから常にモデルを更新することができます(この機能は非常によく機能します)。
  • VS Databaseのプロジェクト(PremiumとUltimate版のみ)と一緒に使うことが多いですね。

モデルから

  • デザイナーが好きな人(=コードやSQLを書くのが嫌いな人)には人気のあるIMHO。
  • あなたはモデルを描き、ワークフローがデータベーススクリプトを生成し、T4テンプレートがPOCOエンティティを生成するようにします。エンティティやデータベースのコントロールはできなくなりますが、小規模で簡単なプロジェクトであれば、非常に生産性が高くなります。
  • POCOエンティティに追加機能が必要な場合は、T4でテンプレートを変更するか、パーシャルクラスを使用する必要があります。
  • モデルでデータベースを定義しているため、データベースに対する手動での変更は、おそらく失われます。これは、データベース生成パワーパックがインストールされている場合、より効果的です。これにより、データベーススキーマの更新(再作成の代わり)、またはVSのデータベースプロジェクトの更新が可能になります。

EF4.1の場合、コードファーストとモデル/データベースファーストに関連する他のいくつかの機能があることを期待しています。コードファーストで使用されるFluent APIは、EDMXのすべての機能を提供しているわけではありません。ストアドプロシージャのマッピング、クエリビュー、ビューの定義などの機能は、モデル/データベースファーストを使用するときに動作すると予想しています。 DbContext (まだ試してませんが)まずCodeにはないそうです。