如何使用Entity Framework DB First的现有枚举
我首先使用Entity Framework 5,DB。 我知道如何在我的模型上定义枚举,并将字段的类型设置为该枚举。
现在,我需要将字段MyField
映射到外部定义的枚举,即不在EF模型( OtherNamespace.MyEnum
)中。 设计者不允许我将类型设置为模型之外的任何类型。 我尝试手动编辑edmx文件,但这会导致错误:
错误10016:解析项目’MyField’时出错。 exception消息是:’Unresolved reference’Othercomspace.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
列并转换为Enum
这将打开一个对话框,允许我们在EDMX ModelStore中指定枚举的名称,定义枚举的任何值或通过Reference外部类型链接到外部枚举。
为其指定TitleEnum
的类型名称,选中“ 引用外部类型” ,然后在提供的字段中键入Enumerations.TitleEnum
。 单击“确定”,它将列与外部枚举相关联。
注意:
- 虽然它们都被称为TitleEnum,但这可以作为外部枚举的直通
- 列的类型和外部枚举必须匹配
现在,当我们创建一个新人时,我们可以利用枚举,它将被转换为其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();