[解決済み] コードファーストとモデル・データベースファーストの比較【終了しました
質問
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にはないそうです。
関連
-
[解決済み] EFのマイグレーション。最後に適用したマイグレーションをロールバックしますか?
-
[解決済み】Entity Framework 4.1 Code Firstでクラスプロパティを無視する
-
[解決済み】Entity Framework。1つのデータベース、複数のDbContexts。これは悪い考えなのか?[クローズド]。
-
[解決済み】Entity Frameworkで複数のカラムにユニークキー制約を設定する
-
[解決済み] Entity Framework - やり直し - すべての移行を元に戻す/ロールバックする
-
[解決済み] Entity Framework 5で子オブジェクトの子オブジェクトをインクルードする方法
-
[解決済み] Entity Framework 4 / POCO - 何から始めるか?[クローズド]
-
[解決済み] DbContextとSetInitializerを使用して、datetime2の範囲外の変換エラーを修正する方法は?
-
[解決済み] 特定のVSプロジェクトでのみパッケージマネージャーコンソールのマイグレーションを有効にするCommandNotFoundExceptionを発生させる
-
[解決済み] 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 - エラー 11007。エンティティタイプはマッピングされていません。
-
[解決済み] エンティティ・フレームワーク・マイグレーションをリセットする
-
[解決済み】1つ以上の外部キーのプロパティが非NULLであるため、リレーションシップを変更できませんでした。
-
[解決済み】.ToList(), .AsEnumerable(), AsQueryable()の違いは何ですか?
-
[解決済み】Entity Frameworkで複数のカラムにユニークキー制約を設定する
-
[解決済み] Entity Framework - やり直し - すべての移行を元に戻す/ロールバックする
-
[解決済み] Symfony2で現在のユーザを表すエンティティを取得する方法は?
-
[解決済み] 特定のVSプロジェクトでのみパッケージマネージャーコンソールのマイグレーションを有効にするCommandNotFoundExceptionを発生させる
-
[解決済み] エンティティフレームワークのコードファーストのNULL外部キー