Tinyint(字节),SmallInt(Int16)与EF5中的Enum不兼容

And*_*cik 24 sqldatatypes entity-framework-5

使用Database first设计并使用tinyint(或smallint)列:

[MyEnumColumn] [tinyint] NOT NULL
Run Code Online (Sandbox Code Playgroud)

我在EDM中将此列映射到枚举类型

External Type: NSpace.MyEnumType
Name:MyEnumType
UnderlyingType:Byte
Run Code Online (Sandbox Code Playgroud)

NSpace.MyEnumType的定义如下:

public enum MyEnumType 
{ One, Two, Three, All }
Run Code Online (Sandbox Code Playgroud)

仅在尝试从上下文加载实体时出现此错误:

指定的架构无效.错误:

对于概念类型"EntityDataModel.MyEnumType",找不到对应的对象层类型.

以下信息可能有助于解决以前的错误:

CLR枚举类型的基础类型与EDM枚举类型的基础类型不匹配.

如果我使用[Smallint]和[Int16]同样适用,但是一旦我将数据库更改为[Int]并将枚举类型更改为[Int32],错误就消失了.

当99.9%的时间内的枚举不超过256个项目或者我错过了其他内容时,为什么我需要将枚举值存储在4Byte(Int)数据字段而不是1Byte(Tinyint)中?

And*_*cik 66

好吧,如果有人有兴趣,问题是在枚举的默认类型:

public enum MyEnumType 
{ One, Two, Three, All }
Run Code Online (Sandbox Code Playgroud)

由于枚举默认为int类型,[Underlying Type:{ Byte }]与[External Type] {MyEnumType:Int}的类型不匹配所以要修复我原来的tinyint字段,你需要像这样定义你的枚举:

public enum MyEnumType : byte
{ One, Two, Three, All }
Run Code Online (Sandbox Code Playgroud)