Entity-framework-enum-support
提供:Dev Guides
Entity Framework-列挙型のサポート
Entity Frameworkでは、この機能により、列挙型であるドメインクラスのプロパティを定義し、それを整数型のデータベース列にマップできます。 Entity Frameworkは、データを照会して保存するときに、データベース値と関連する列挙型を相互に変換します。
- 列挙型には、応答の数が固定されているプロパティを操作するときに、あらゆる種類の利点があります。
- 列挙を使用すると、アプリケーションのセキュリティと信頼性の両方が向上します。
- 列挙により、ユーザーは間違いを犯しにくくなり、インジェクション攻撃などの問題は存在しなくなります。
- Entity Frameworkでは、列挙は次の基本型を持つことができます-
- Byte
- Int16
- Int32
- Int64
- SByte
- 列挙型要素のデフォルトの基本型はintです。
- デフォルトでは、最初の列挙子の値は0であり、連続する各列挙子の値は1ずつ増加します。
デザイナーでエンティティを作成し、いくつかのプロパティを追加する次の例を見てみましょう。
- ステップ1 *-[ファイル]→[新規]→[プロジェクト]メニューオプションから新しいプロジェクトを作成します。
- ステップ2 *-左ペインで、コンソールアプリケーションを選択します。
- ステップ3 *-プロジェクトの名前としてEFEnumDemoを入力し、[OK]をクリックします。
- ステップ4 *-ソリューションエクスプローラーでプロジェクト名を右クリックし、[追加]→[新しいアイテム]メニューオプションを選択します。
- ステップ5 *-[テンプレート]ペインで[ADO.NETエンティティデータモデル]を選択します。
- ステップ6 *-ファイル名にEFEnumModel.edmxと入力し、[追加]をクリックします。
- ステップ7 *-エンティティデータモデルウィザードページで、空のEFデザイナーモデルを選択します。
- ステップ8 *-[完了]をクリックします
- ステップ9 *-次にデザイナーウィンドウを右クリックし、[追加]→[エンティティ]を選択します。
次の図に示すように、[新しいエンティティ]ダイアログボックスが表示されます。
- ステップ10 *-エンティティ名としてDepartmentを、プロパティ名としてDeptIDを入力し、プロパティタイプをInt32のままにして、[OK]をクリックします。
- ステップ11 *-エンティティを右クリックして、[新規追加]→[スカラープロパティ]を選択します。
- ステップ12 *-新しいプロパティの名前をDeptNameに変更します。
- ステップ13 *-新しいプロパティのタイプをInt32に変更します(デフォルトでは、新しいプロパティは文字列タイプです)。
- ステップ14 *-タイプを変更するには、[プロパティ]ウィンドウを開き、[タイプ]プロパティをInt32に変更します。
- ステップ15 *-Entity Framework Designerで、Nameプロパティを右クリックし、Convert to enumを選択します。
- ステップ16 *-列挙型の追加ダイアログボックスで、列挙型名にDepartmentNamesを入力し、基になる型をInt32に変更し、次のメンバーを型に追加します:物理、化学、コンピューター、および経済。
- ステップ17 *-[OK]をクリックします。
[モデルブラウザー]ウィンドウに切り替えると、その型が[列挙型]ノードにも追加されたことがわかります。
モデルファーストアプローチの章に記載されているすべての手順に従って、モデルからデータベースを生成しましょう。
- ステップ1 *-エンティティデザイナサーフェスを右クリックし、[モデルからデータベースを生成]を選択します。
データベースの生成ウィザードの[データ接続の選択]ダイアログボックスが表示されます。
- ステップ2 *-[新しい接続]ボタンをクリックします。
- ステップ3 *-データベースのサーバー名とEnumDemoを入力し、[OK]をクリックします。
- ステップ4 *-新しいデータベースを作成するかどうかを尋ねるダイアログが表示されたら、[はい]をクリックします。
- ステップ5 *-[次へ]をクリックすると、データベースの作成ウィザードがデータベースを作成するためのデータ定義言語(DDL)を生成します。 [完了]をクリックします。
- ステップ6 *-T-SQLエディターを右クリックして、[実行]を選択します。
- ステップ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
理解を深めるために、上記の例を段階的に実行することをお勧めします。