最初にモデルを使用してアプリケーションのクリーンな EF モデルを生成したいのですが、モデルで新しい db スキーマを生成する代わりに、エンティティ内で既存のデータベース テーブルまたは複数のテーブルにテーブル マッピングを手動で実行したいと考えています。これにはメカニズムがありますか?
3 に答える
確かにそうです。
これはEntity Framework Code-Firstと呼ばれ、入門に役立つ優れたチュートリアルです。
アイデアは、いくつかの POCO クラスをリポジトリ/データベース クラスとは別に作成することです。このリポジトリ/データベース クラスでは、POCO 間のすべての関係を定義します。さいわい、Entity Framework には、活用できる多くの規則があります。つまり、すべての関係とルールを定義する必要はないかもしれません。
例えば。クラスが呼び出さUser
れた場合、(これをオーバーライドしない限り、デフォルトで) データベース テーブルが呼び出さUsers
れ、POCO の主キー ID フィールドがUserId
データベース テーブルと同じであると想定されます。
また、EF 4.0 で最初に EF モデルを使用してこのオプションを探しました。また、データベースの規模のために表示することさえできないため、すべてを 1 つの edmx にインポートできない巨大なエンタープライズ レベルのアプリケーションがあるため、小さなクリーンなモデルから始めたいと考えていました。
そのため、最初にモデルをオプションとして検討し、より小さくてクリーンなモデルを構築し、それらをデータベース内の既存のテーブルにマップしたいと考えました。
これが私たちが学んだことです。
モデルは最初に「既存のデータベース」に入るデータベーススキーマを生成します。新しいデータベースを作成すると人々が考えているため、最初は誤解を招く可能性があります。実際にはデータベース自体を作成しません。データベースが存在する必要があり、モデルは最初にデータベースに入る t-sql スクリプトを生成します。
これらのスクリプトは、プロジェクトの新しい .sql ファイルに生成されます。これを表示したり、DBA がある場合は、DBA に送信したりできます。
テーブルが存在しないと仮定して、これらのスクリプトをテーブルの CREATES として生成します。
たとえば、モデルに「顧客」エンティティを作成した場合、CREATE TABLE T-sql を含むスクリプト (*.sql) ファイルが生成され、顧客エンティティの顧客テーブルが作成され、それを実行できます。既存の SQL データベース。
これが、基本的に新しいモデルのクリーンなテーブルを生成するように設計されていることです。
これは、テーブルが既に存在する場合、それをまったく使用できないということですか? いいえ、使えます。生成された Create スクリプトを実行しないだけです。本当にこのために設計されたものだとは思いませんが、これをテストしたところ、うまくいきました。
model first で追加の問題が発生する可能性があり、私たちが発見した制限は、model first が新しい db スキーマを生成するように設計されているため、既存のストアド プロシージャにマップできないことです。これは私たちにとって問題だったので、アーキテクチャのオプションとして最初にモデルを削除しました。
現在、エンタープライズ レベル システムのオプションとしてコード ファーストとデータベース ファーストを検討しており、現時点ではコード ファーストに傾いています。Code first を使用すると、操作できる小さくて管理しやすいコンテキストを作成できます。これは、大規模なエンタープライズ レベルのアプリケーションでは非常に有益です。
質問を理解しているかどうかはわかりませんが、ウィザードを使用して新しいエンティティ データ モデルを作成する場合、最初のステップで「データベースから生成」することができ、それを既存の DB にポイントするだけです。次に、不要なテーブルを切り取ったり、テーブル マッピングを手動で変更したりできます。最初に、モデルで表現するテーブルを選択するオプションもあります。