注
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 では、列挙型には、 Byte、 Int16、 Int32、 Int64 、 SByte のいずれかの基になる型を指定できます。
ビデオを見る
このビデオでは、Entity Framework Code First で列挙型を使用する方法について説明します。 また、LINQ クエリで列挙型を使用する方法も示します。
発表者: Julia Kornich
前提条件
このチュートリアルを完了するには、Visual Studio 2012、Ultimate、Premium、Professional、または Web Express エディションをインストールする必要があります。
プロジェクトを設定する
- Visual Studio 2012 を開く
- [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
- 左側のウィンドウで、[ Visual C#] をクリックし、 コンソール テンプレートを選択します。
- プロジェクトの名前として「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 への参照を追加します。
- ソリューション エクスプローラーで、プロジェクト名を右クリックします。
- [ NuGet パッケージの管理]を選択します。..
- [NuGet パッケージの管理] ダイアログで、[ オンライン ] タブを選択し、 EntityFramework パッケージを選択します。
- [インストール]をクリックします。
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 を使用してデータベース スキーマを更新する必要があることに注意してください。 移行の使用例については、「 新しいデータベースへのコードファースト 」を参照してください。
データベースとデータを表示するには、次の操作を行います。
- Visual Studio 2012 のメイン メニューで、[ 表示 ] ->SQL サーバー オブジェクト エクスプローラーを選択します。
- LocalDB がサーバーの一覧にない場合は、 SQL Server の右マウス ボタンをクリックし、[ SQL Server の追加 ] を選択します。既定の Windows 認証 を使用して LocalDB インスタンスに接続します
- LocalDB ノードを展開する
- [ データベース ] フォルダーを展開して新しいデータベースを表示し、 Department テーブルを参照します。Code First は列挙型にマップするテーブルを作成しません。
- データを表示するには、テーブルを右クリックし、[データの表示] を選択します。
まとめ
このチュートリアルでは、Entity Framework Code First で列挙型を使用する方法について説明しました。
.NET