如何使用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以后)支持将字段映射到枚举,但仅适用于bytesbyteshortushortintuintlongulong类型。

假设我们有以下示例表:

 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(); 

智能感知