次の方法で共有


列挙型のサポート - コード優先

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

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

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

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

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

ビデオを見る

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

発表者: Julia Kornich

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

前提条件

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

 

プロジェクトを設定する

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

Code First を使用して新しいモデルを定義する

Code First 開発を使用する場合は、通常、概念 (ドメイン) モデルを定義する .NET Framework クラスを記述することから始めます。 次のコードでは、Department クラスを定義します。

このコードでは、DepartmentNames 列挙も定義します。 既定では、列挙型は int 型です。 Department クラスの Name プロパティは DepartmentNames 型です。

Program.cs ファイルを開き、次のクラス定義を貼り付けます。

public enum DepartmentNames
{
    English,
    Math,
    Economics
}     

public partial class Department
{
    public int DepartmentID { get; set; }
    public DepartmentNames Name { get; set; }
    public decimal Budget { get; set; }
}

 

DbContext 派生型を定義する

エンティティの定義に加えて、DbContext から派生し、DbSet<TEntity> プロパティを公開するクラスを定義する必要があります。 DbSet<TEntity> プロパティを使用すると、モデルに含める型がコンテキストに認識されます。

DbContext 派生型のインスタンスは、実行時にエンティティ オブジェクトを管理します。これには、データベースからのデータを含むオブジェクトの設定、変更の追跡、データベースへのデータの永続化が含まれます。

DbContext 型と DbSet 型は EntityFramework アセンブリで定義されます。 EntityFramework NuGet パッケージを使用して、この DLL への参照を追加します。

  1. ソリューション エクスプローラーで、プロジェクト名を右クリックします。
  2. [ NuGet パッケージの管理]を選択します。..
  3. [NuGet パッケージの管理] ダイアログで、[ オンライン ] タブを選択し、 EntityFramework パッケージを選択します。
  4. [インストール]をクリックします。

EntityFramework アセンブリに加えて、System.ComponentModel.DataAnnotations および System.Data.Entity アセンブリへの参照も追加されることに注意してください。

Program.cs ファイルの先頭に、次の using ステートメントを追加します。

using System.Data.Entity;

Program.csでコンテキスト定義を追加します。 

public partial class EnumTestContext : DbContext
{
    public DbSet<Department> Departments { get; set; }
}

 

データの永続化と取得

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

using (var context = new EnumTestContext())
{
    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} Name: {1}",
        department.DepartmentID,  
        department.Name);
}

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

DepartmentID: 1 Name: English

 

生成されたデータベースを表示する

アプリケーションを初めて実行すると、Entity Framework によってデータベースが自動的に作成されます。 Visual Studio 2012 がインストールされているため、LocalDB インスタンスにデータベースが作成されます。 既定では、Entity Framework は、派生コンテキストの完全修飾名の後にデータベースの名前を付けます (この例では EnumCodeFirst.EnumTestContext)。 その後、既存のデータベースが使用されます。  

データベースの作成後にモデルに変更を加えた場合は、Code First Migrations を使用してデータベース スキーマを更新する必要があることに注意してください。 移行の使用例については、「 新しいデータベースへのコードファースト 」を参照してください。

データベースとデータを表示するには、次の操作を行います。

  1. Visual Studio 2012 のメイン メニューで、[ 表示 ] ->SQL サーバー オブジェクト エクスプローラーを選択します。
  2. LocalDB がサーバーの一覧にない場合は、 SQL Server の右マウス ボタンをクリックし、[ SQL Server の追加 ] を選択します。既定の Windows 認証 を使用して LocalDB インスタンスに接続します
  3. LocalDB ノードを展開する
  4. [ データベース ] フォルダーを展開して新しいデータベースを表示し、 Department テーブルを参照します。Code First は列挙型にマップするテーブルを作成しません。
  5. データを表示するには、テーブルを右クリックし、[データの表示] を選択します。

まとめ

このチュートリアルでは、Entity Framework Code First で列挙型を使用する方法について説明しました。