Entity-framework-entity-model-first-approach

提供:Dev Guides
移動先:案内検索

エンティティフレームワーク-モデルファーストアプローチ

この章では、Model Firstと呼ばれるワークフローを使用して、デザイナーでエンティティデータモデルを作成する方法を学習します。

  • Model Firstは、データベースがまだ存在しない新しいプロジェクトを開始するときに最適です。
  • モデルはEDMXファイルに保存され、Entity Framework Designerで表示および編集できます。
  • Model Firstでは、Entity Frameworkデザイナーでモデルを定義してから、モデルに一致するデータベーススキーマを作成するSQLを生成し、SQLを実行してデータベースにスキーマを作成します。
  • アプリケーションで対話するクラスは、EDMXファイルから自動的に生成されます。

以下は、モデルファーストアプローチを使用して新しいコンソールプロジェクトを作成する簡単な例です。

  • ステップ1 *-Visual Studioを開き、ファイル→新規→プロジェクトを選択します

コンソールプロジェクト

  • ステップ2 *-左ペインから[インストール済み]→[テンプレート]→[Visual C#]→[Windows]を選択し、中央ペインで[コンソールアプリケーション]を選択します。
  • ステップ3 *-[名前]フィールドに「EFModelFirstDemo」と入力します。
  • ステップ4 *-モデルを作成するには、まずソリューションエクスプローラーでコンソールプロジェクトを右クリックし、[追加]→[新しいアイテム…​]を選択します。

モデル

次のダイアログが開きます。

新規追加

  • ステップ5 *-中央のペインからADO.NET Entity Data Modelを選択し、NameフィールドにModelFirstDemoDBという名前を入力します。
  • ステップ6 *-[追加]ボタンをクリックして、[エンティティデータモデルウィザード]ダイアログを起動します。

モデルウィザードダイアログ

  • ステップ7 *-空のEF Designerモデルを選択し、[次へ]ボタンをクリックします。 Entity Framework Designerが開き、空のモデルが表示されます。 これで、エンティティ、プロパティ、および関連付けをモデルに追加できます。
  • ステップ8 *-デザイン画面を右クリックして、[プロパティ]を選択します。 [プロパティ]ウィンドウで、[エンティティコンテナ名]をModelFirstDemoDBContextに変更します。

デザインサーフェス

  • ステップ9 *-デザイン画面を右クリックして、[新規追加]→[エンティティ…]を選択します

新しいエンティティの追加

次の図に示すように、[エンティティの追加]ダイアログが開きます。

エンティティダイアログ

  • ステップ10 *-エンティティ名としてStudent、プロパティ名としてStudent IDを入力して、[OK]をクリックします。

生徒

  • ステップ11 *-デザイン画面で新しいエンティティを右クリックし、[新規追加]→[スカラープロパティ]を選択して、プロパティの名前として[名前]を入力します。

新しいエンティティ

  • ステップ12 *-FirstNameを入力し、LastNameやEnrollmentDateなどの別の2つのスカラープロパティを追加します。

スカラープロパティ

  • ステップ13 *-上記のすべてのステップに従って、さらに2つのエンティティコースと登録を追加し、次のステップに示すようにいくつかのスカラープロパティも追加します。

ビジュアルデザイナー

  • ステップ14 *-Visual Designerに3つのエンティティがあります。それらの間に何らかの関連または関係を追加しましょう。
  • ステップ15 *-デザイン画面を右クリックして、[新規追加]→[関連付け…​]を選択します。

関連付けの追加

  • ステップ16 *-関係の一方の端を生徒の多重度で1つ、もう一方の端点を多数の登録で登録する。

1つの多重度

  • ステップ17 *-これは、学生が多くの登録を持ち、登録が1人の学生に属することを意味します。
  • ステップ18 *-[外部エンティティのプロパティを[投稿]エンティティに追加する]ボックスがオンになっていることを確認し、[OK]をクリックします。
  • ステップ19 *-同様に、コースと登録の間にもう1つの関連付けを追加します。

コースと登録

  • ステップ20 *-エンティティ間に関連付けを追加すると、データモデルは次の画面のようになります。

データモデル

これで、データベースを生成し、データの読み取りと書き込みに使用できる単純なモデルができました。 先に進み、データベースを生成しましょう。

  • ステップ1 *-デザイン画面を右クリックして、[モデルからデータベースを生成…​]を選択します。

モデルからのデータベース

  • ステップ2 *-[新しい接続]をクリックして、既存のデータベースを選択するか、新しい接続を作成できます…

データベースの生成

  • ステップ3 *-新しいデータベースを作成するには、[新しい接続]をクリックします…

接続プロパティ

  • ステップ4 *-サーバー名とデータベース名を入力します。

サーバーとデータベース

  • ステップ5 *-[次へ]をクリックします。

サーバーとデータベース1

ステップ6 *-[完了]をクリックします。 これにより、プロジェクトに .edmx.sqlファイルが追加されます。 .sqlファイルを開いてVisual StudioでDDLスクリプトを実行し、右クリックして[実行]を選択します。

DDLスクリプト

  • ステップ7 *-データベースに接続するための次のダイアログが表示されます。

データベースに接続

  • ステップ8 *-正常に実行されると、次のメッセージが表示されます。

成功した実行

  • ステップ9 *-サーバーエクスプローラーに移動すると、指定された3つのテーブルでデータベースが作成されていることがわかります。

作成されたデータベース

次に、モデルを交換して、DbContext APIを使用するコードを生成する必要があります。

  • ステップ1 *-EF Designerでモデルの空の場所を右クリックし、[コード生成アイテムを追加…]を選択します

EF Designer

次の[新しい項目の追加]ダイアログが開きます。

ダイアログを開く

  • ステップ2 *-中央のペインでEF 6.x DbContext Generatorを選択し、[名前]フィールドにModelFirstDemoModelと入力します。
  • ステップ3 *-ソリューションエクスプローラーで、ModelFirstDemoModel.Context.ttおよびModelFirstDemoModel.ttテンプレートが生成されることがわかります。

テンプレート生成

ModelFirstDemoModel.Contextは、DbCcontextとオブジェクトセットを生成します。これらのオブジェクトセットを返すと、クエリ、コンテキスト、学生、コースなどに使用できます。

他のテンプレートは、学生、コースなどのすべてのタイプを扱います。 以下は、エンティティモデルから自動的に生成されるStudentクラスです。

CSharpコード

以下は、データベースにデータを入力および取得するC#コードです。

using System;
using System.Linq;

namespace EFModelFirstDemo {

   class Program {

      static void Main(string[] args) {

         using (var db = new ModelFirstDemoDBContext()) {

           //Create and save a new Student

            Console.Write("Enter a name for a new Student: ");
            var firstName = Console.ReadLine();

            var student = new Student {
               StudentID = 1,
               FirstName = firstName
            };

            db.Students.Add(student);
            db.SaveChanges();

            var query = from b in db.Students
               orderby b.FirstName select b;

            Console.WriteLine("All student in the database:");

            foreach (var item in query) {
               Console.WriteLine(item.FirstName);
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
         }
      }
   }
}

上記のコードが実行されると、次の出力が表示されます-

Enter a name for a new Student:
Ali Khan
All student in the database:
Ali Khan
Press any key to exit...

理解を深めるために、上記の例を段階的に実行することをお勧めします。