列挙型のサポート - EF Designer

Note

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

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

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

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

Entity Framework では、列挙型には、次の基になる型を指定できます: ByteInt16Int32Int64、または SByte

ビデオを見る

このビデオには、Entity Framework Designer で列挙型を使用する方法が示されています。 また、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 Designer を使用して新しいモデルを作成する

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

モデルを編集するためのデザイン サーフェイスを提供する Entity Designer が表示されます。

ウィザードは、次のアクションを実行します。

  • 概念モデル、ストレージ モデル、およびこれらのモデル間のマッピングを定義する 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 Designer で、Name プロパティを右クリックし、[Enum に変換] を選択します。

    Convert To Enum

  2. [列挙型の追加] ダイアログ ボックスで、[列挙型の名前] として「DepartmentNames」と入力し、[基になる型] を [Int32] に変更してから、次のメンバーを型に追加します: English、Math、Economics

    Add Enum Type

  3. [OK] を押します

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

    Note

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

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

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

Model Browser

Note

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

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

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

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

データの永続化と取得

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

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 Designer を使用して列挙型をマップする方法と、コードで列挙型を使用する方法について説明しました。