次の方法で共有


列挙型のサポート - EF デザイナー

EF5 以降のみ - このページで説明されている機能、API などが Entity Framework 5 で導入されました。 以前のバージョンを使用している場合、一部またはすべての情報は適用されません。

このビデオと詳細なチュートリアルでは、Entity Framework Designer で列挙型を使用する方法について説明します。 また、LINQ クエリで列挙型を使用する方法も示します。

このチュートリアルでは、Model First を使用して新しいデータベースを作成しますが、EF Designer を データベース ファースト ワークフローと共に使用して既存のデータベースにマップすることもできます。

列挙型のサポートは Entity Framework 5 で導入されました。 列挙型、空間データ型、テーブル値関数などの新機能を使用するには、.NET Framework 4.5 をターゲットにする必要があります。 Visual Studio 2012 は、既定で .NET 4.5 を対象とします。

Entity Framework では、列挙型には、 ByteInt16Int32Int64SByte のいずれかの基になる型を指定できます。

ビデオを見る

このビデオでは、Entity Framework デザイナーで列挙型を使用する方法について説明します。 また、LINQ クエリで列挙型を使用する方法も示します。

発表者: Julia Kornich

ビデオ: WMV | MP4 | WMV (ZIP)

前提条件

このチュートリアルを完了するには、Visual Studio 2012、Ultimate、Premium、Professional、または Web Express エディションをインストールする必要があります。

プロジェクトを設定する

  1. Visual Studio 2012 を開く
  2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
  3. 左側のウィンドウで、[ Visual C#] をクリックし、 コンソール テンプレートを選択します。
  4. プロジェクトの名前として EnumEFDesigner を入力し、[OK] をクリックします。

EF デザイナーを使用して新しいモデルを作成する

  1. ソリューション エクスプローラーでプロジェクト名を右クリックし、[追加] をポイントして、[新しい項目] をクリックします。
  2. 左側のメニューから [データ ] を選択し、[テンプレート] ウィンドウ ADO.NET エンティティ データ モデル を選択します
  3. ファイル名として「EnumTestModel.edmx」と入力し、[追加] をクリックします。
  4. [エンティティ データ モデル ウィザード] ページで、[モデル コンテンツの選択] ダイアログ ボックスで [空 のモデル] を選択します。
  5. [完了] をクリックします。

モデルを編集するためのデザイン 画面を提供するエンティティ デザイナーが表示されます。

ウィザードは、次の操作を実行します。

  • 概念モデル、ストレージ モデル、およびそれらの間のマッピングを定義する EnumTestModel.edmx ファイルを生成します。 生成されたメタデータ ファイルがアセンブリに埋め込まれるように、.edmx ファイルのメタデータ成果物処理プロパティを [出力アセンブリに埋め込む] に設定します。
  • EntityFramework、System.ComponentModel.DataAnnotations、および System.Data.Entity の各アセンブリへの参照を追加します。
  • EnumTestModel.tt および EnumTestModel.Context.tt ファイルを作成し、.edmx ファイルの下に追加します。 これらの T4 テンプレート ファイルは、.edmx モデルのエンティティにマップされる DbContext 派生型と POCO 型を定義するコードを生成します。

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

  1. デザイン サーフェイスの空の領域を右クリックし、[ 追加] -> [エンティティ] を選択すると、[新しいエンティティ] ダイアログ ボックスが表示されます
  2. 型名に Department を指定し、キー プロパティ名に DepartmentID を指定します。型は Int32 のままにします
  3. 「OK」をクリックして
  4. エンティティを右クリックし、[新規追加] -> スカラー プロパティを選択します。
  5. 新しいプロパティの名前を Name に変更する
  6. 新しいプロパティの型を Int32 に変更します (既定では、新しいプロパティは String 型です)、型を変更するには、[プロパティ] ウィンドウを開き、Type プロパティを Int32 に変更します
  7. 別のスカラー プロパティを追加して Budget に名前を変更し、型を Decimal に変更します

列挙型を追加する

  1. Entity Framework デザイナーで、Name プロパティを右クリックし、[列挙型に変換] を選択します。

    列挙型に変換する

  2. [ 列挙型の追加 ] ダイアログ ボックスで、「列挙型名の DepartmentNames 」と入力し、基になる型を Int32 に変更し、次のメンバーを型に追加します:英語、数学、および経済学

    列挙型の追加

  3. [OK] を押す

  4. モデルを保存してプロジェクトをビルドする

    ビルドすると、マップされていないエンティティと関連付けに関する警告がエラー一覧に表示されることがあります。 モデルからデータベースを生成することを選択するとエラーが解消されるため、これらの警告は無視できます。

[プロパティ] ウィンドウを見ると、Name プロパティの型が DepartmentNames に変更され、新しく追加された列挙型が型の一覧に追加されていることがわかります。

[モデル ブラウザー] ウィンドウに切り替えると、型も [列挙型] ノードに追加されていることがわかります。

モデル ブラウザー

マウスの右ボタンをクリックし、[列挙型の追加] を選択して、このウィンドウから新しい 列挙型を追加することもできます。 型が作成されると、型の一覧に表示され、プロパティに関連付けることができます。

モデルからデータベースを生成する

これで、モデルに基づくデータベースを生成できます。

  1. エンティティ デザイナー画面で空の領域を右クリックし、[モデルからデータベースを生成] を選択します。
  2. データベースの生成ウィザードの [データ接続の選択] ダイアログ ボックスが表示されます。[新しい接続] ボタンをクリックしてサーバー名を指定 (localdb)\mssqllocaldb、データベースの EnumTest をクリックし、[OK] をクリックします
  3. 新しいデータベースを作成するかどうかを確認するダイアログボックスが表示されたら、[ はい] をクリックします。
  4. [ 次へ ] をクリックすると、データベースを作成するためのデータ定義言語 (DDL) が生成されます。生成された DDL は、[概要と設定] ダイアログ ボックスに表示されます。DDL には列挙型にマップされるテーブルの定義が含まれていないことに注意してください。
  5. Finish をクリックしても DDL スクリプトは実行されません。
  6. データベースの作成ウィザードでは、次の処理が行われます。T-SQL エディターで EnumTest.edmx.sql が開き、EDMX ファイルのストア スキーマとマッピング セクションが生成され、接続文字列情報が App.config ファイルに追加されます。
  7. T-SQL エディターでマウスの右ボタンをクリックし、[サーバーへの接続] ダイアログが表示される [実行] を選択し、手順 2 の接続情報を入力して [接続] をクリックします
  8. 生成されたスキーマを表示するには、SQL Server オブジェクト エクスプローラーでデータベース名を右クリックし、[最新の情報に更新] を選択します

データの永続化と取得

Main メソッドが定義されているProgram.cs ファイルを開きます。 Main 関数に次のコードを追加します。 このコードは、コンテキストに新しい Department オブジェクトを追加します。 その後、データが保存されます。 このコードでは、Department を返す LINQ クエリも実行されます。この名前は DepartmentNames.English です。

using (var context = new EnumTestModelContainer())
{
    context.Departments.Add(new Department{ Name = DepartmentNames.English });

    context.SaveChanges();

    var department = (from d in context.Departments
                        where d.Name == DepartmentNames.English
                        select d).FirstOrDefault();

    Console.WriteLine(
        "DepartmentID: {0} and Name: {1}",
        department.DepartmentID,  
        department.Name);
}

アプリケーションをコンパイルして実行します。 このプログラムの出力は、次のようになります。

DepartmentID: 1 Name: English

データベース内のデータを表示するには、SQL Server オブジェクト エクスプローラーでデータベース名を右クリックし、[ 最新の情報に更新] を選択します。 次に、テーブルの右マウス ボタンをクリックし、[ データの表示] を選択します。

まとめ

このチュートリアルでは、Entity Framework デザイナーを使用して列挙型をマップする方法と、コードで列挙型を使用する方法について説明しました。