如何使用Entity Framework DB First的现有枚举

Sha*_*ica 27 c# ef-database-first entity-framework-5

我首先使用Entity Framework 5,DB.我知道如何在我的模型上定义枚举,并将字段的类型设置为该枚举.

现在,我需要将字段映射MyField到外部定义的枚举,即不在EF模型(OtherNamespace.MyEnum)中.设计者不允许我将类型设置为模型之外的任何类型.我尝试手动编辑edmx文件,但这会导致错误:

错误10016:解析项目"MyField"时出错.异常消息是:'Unresolved reference'Othercomspace.MyEnum'.'.

OtherNamespace.MyEnum 由我的项目引用.

你怎么做呢?

cbe*_*ner 53

这可以做到,但它需要在数据库方面做出一点牺牲.实体框架(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
)
Run Code Online (Sandbox Code Playgroud)

Title已被声明为整数.在真实数据库中,这可能是表的外键TitleTypes.

另外,让我们假设我们要绑定的外部枚举定义为:

namespace Enumerations
{
    public enum TitleEnum
    {
        Mr,
        Mrs,
        Dr,
        None
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我们将People表导入EDMX,我们可以右键单击Title列并转换为枚举

转换为枚举

这将打开一个对话框,允许我们在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();
Run Code Online (Sandbox Code Playgroud)

智能感知