EntityFramework-列挙型のサポート
Entity Frameworkでは、この機能を使用して、列挙型であるドメインクラスのプロパティを定義し、それを整数型のデータベース列にマップできます。Entity Frameworkは、データをクエリして保存するときに、データベース値を関連する列挙型との間で変換します。
列挙型には、応答の数が固定されているプロパティを操作するときにさまざまな利点があります。
列挙型を使用すると、アプリケーションのセキュリティと信頼性の両方が向上します。
列挙により、ユーザーがミスを犯しにくくなり、インジェクション攻撃などの問題は発生しません。
Entity Frameworkでは、列挙型は次の基になるタイプを持つことができます-
- Byte
- Int16
- Int32
- Int64
- SByte
列挙要素のデフォルトの基になるタイプはintです。
デフォルトでは、最初の列挙子の値は0であり、連続する各列挙子の値は1ずつ増加します。
デザイナでエンティティを作成してから、いくつかのプロパティを追加する次の例を見てみましょう。
Step 1 − [ファイル]→[新規]→[プロジェクト]メニューオプションから新しいプロジェクトを作成します。
Step 2 −左側のペインで、コンソールアプリケーションを選択します。
Step 3 −プロジェクトの名前としてEFEnumDemoを入力し、[OK]をクリックします。
Step 4 −ソリューションエクスプローラーでプロジェクト名を右クリックし、[追加]→[新しいアイテム]メニューオプションを選択します。
Step 5 − [テンプレート]ペインで[ADO.NETエンティティデータモデル]を選択します。
Step 6 −ファイル名にEFEnumModel.edmxと入力し、[追加]をクリックします。
Step 7 − [Entity Data Model Wizard]ページで、[Empty EF DesignerModel]を選択します。
Step 8 − [完了]をクリックします
Step 9 −次に、デザイナウィンドウを右クリックして、「追加」→「エンティティ」を選択します。
次の図に示すように、[新しいエンティティ]ダイアログボックスが表示されます。
Step 10 −エンティティ名としてDepartmentを入力し、プロパティ名としてDeptIDを入力し、プロパティタイプをInt32のままにして、[OK]をクリックします。
Step 11 −エンティティを右クリックし、「新規追加」→「スカラープロパティ」を選択します。
Step 12 −新しいプロパティの名前をDeptNameに変更します。
Step 13 −新しいプロパティのタイプをInt32に変更します(デフォルトでは、新しいプロパティは文字列タイプです)。
Step 14 −タイプを変更するには、[プロパティ]ウィンドウを開き、TypeプロパティをInt32に変更します。
Step 15 − Entity Framework Designerで、Nameプロパティを右クリックし、[列挙型に変換]を選択します。
Step 16 − [列挙型の追加]ダイアログボックスで、[列挙型名]にDepartmentNamesと入力し、[基になる型]をInt32に変更してから、[物理]、[化学]、[コンピューター]、および[経済]のメンバーを型に追加します。
Step 17 − [OK]をクリックします。
[モデルブラウザ]ウィンドウに切り替えると、そのタイプが[列挙型]ノードにも追加されていることがわかります。
モデルファーストアプローチの章で説明されているすべての手順に従って、モデルからデータベースを生成しましょう。
Step 1 −エンティティデザイナ画面を右クリックし、「モデルからデータベースを生成」を選択します。
データベースの生成ウィザードの[データ接続の選択]ダイアログボックスが表示されます。
Step 2 − [新しい接続]ボタンをクリックします。
Step 3 −データベースのサーバー名とEnumDemoを入力し、[OK]をクリックします。
Step 4 −新しいデータベースを作成するかどうかを尋ねるダイアログが表示されたら、[はい]をクリックします。
Step 5− [次へ]をクリックすると、データベースの作成ウィザードがデータベースを作成するためのデータ定義言語(DDL)を生成します。次に、[完了]をクリックします。
Step 6 − T-SQL Editorを右クリックして、[実行]を選択します。
Step 7 −生成されたスキーマを表示するには、SQL Serverオブジェクトエクスプローラーでデータベース名を右クリックし、[更新]を選択します。
データベースにDepartmentsテーブルが表示されます。
コンテキストにいくつかの新しいDepartmentオブジェクトが追加され、保存されている次の例を見てみましょう。次に、コンピュータ部門を取得します。
class Program {
static void Main(string[] args) {
using (var context = new EFEnumModelContainer()) {
context.Departments.Add(new Department { DeptName = DepartmentNames.Physics});
context.Departments.Add(new Department { DeptName = DepartmentNames.Computer});
context.Departments.Add(new Department { DeptName = DepartmentNames.Chemistry});
context.Departments.Add(new Department { DeptName = DepartmentNames.Economics});
context.SaveChanges();
var department = (
from d in context.Departments
where d.DeptName == DepartmentNames.Computer
select d
).FirstOrDefault();
Console.WriteLine(
"Department ID: {0}, Department Name: {1}",
department.DeptID, department.DeptName
);
Console.ReadKey();
}
}
}
上記のコードを実行すると、次の出力が返されます。
Department ID: 2, Department Name: Computer
理解を深めるために、上記の例を段階的に実行することをお勧めします。