这是可以做到的,但是需要在数据库方面做出一点牺牲。实体框架(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
列并转换为枚举
这将弹出一个对话框,允许我们在 EDMX ModelStore 中为枚举指定名称,为枚举定义任何值或通过Reference external type链接到外部枚举。
给它一个 Type Name TitleEnum
,检查Reference external type,然后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();