Entity Framework 5、DBを最初に使用しています。モデルに列挙型を定義し、フィールドのタイプをその列挙型に設定する方法を知っています。
今、私はフィールドMyField
を外部で、つまりEFモデルではなく(OtherNamespace.MyEnum
)。デザイナーがタイプをモデルの外に設定することを許可していません。 edmxファイルを手動で編集してみましたが、エラーが発生します。
エラー10016:アイテム 'MyField'の解決中にエラーが発生しました。例外メッセージは、「未解決の参照「OtherNamespace.MyEnum」です。」です。
OtherNamespace.MyEnum
は私のプロジェクトによって参照されています。
どうやってやるの?
これは可能ですが、データベース側で少し犠牲を払う必要があります。 Entity Framework(5以降)は、フィールドの列挙へのマッピングをサポートしていますが、byte
、sbyte
、short
、ushort
、int
、uint
、long
、またはulong
タイプ。
次のサンプルテーブルがあるとします。
CREATE TABLE [People](
[id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[Name] [varchar](50) NOT NULL,
[Title] [int] NOT NULL
)
Title
は整数として宣言されています。実際のデータベースでは、これはTitleTypes
テーブルへの外部キーである可能性があります。
また、結び付ける外部列挙が次のように定義されているとします。
namespace Enumerations
{
public enum TitleEnum
{
Mr,
Mrs,
Dr,
None
}
}
People
テーブルをEDMXにインポートすると、Title
列を右クリックしてConvert to Enum
これにより、ダイアログボックスが表示され、EDMX ModelStoreで列挙型の名前を指定し、列挙型の値を定義できます[〜#〜] or [〜#〜]Reference external typeを介した外部列挙へのリンク。
タイプ名にTitleEnum
を付け、参照外部タイプを確認し、提供されたフィールドにEnumerations.TitleEnum
と入力します。 [OK]をクリックすると、列が外部列挙に関連付けられます。
注:
これで、新しい人物を作成するときに、列挙を利用でき、それはそのInt表現に変換されます。
Data.ScratchEntities context = new Data.ScratchEntities();
Data.Person person = new Data.Person();
person.Name = "Jane Smith";
//Note the use of the external enumeration here
person.Title = Enumerations.TitleEnum.Mrs;
context.People.Add(person);
context.SaveChanges();