使用数据库优先设计并使用tinyint(或smallint)列:
[MyEnumColumn] [tinyint] NOT NULL
我使用
将此列映射到EDM中的枚举类型External Type: NSpace.MyEnumType
Name:MyEnumType
UnderlyingType:Byte
NSpace.MyEnumType的定义如下:
public enum MyEnumType
{ One, Two, Three, All }
仅在尝试从上下文加载实体时出现此错误:
指定的架构无效。错误:
无法找到相应的对象图层类型 输入'EntityDataModel.MyEnumType'。
以下信息可能有助于解决之前的问题 错误:
CLR枚举类型的基础类型与 EDM枚举类型的基础类型。
如果我使用[Smallint]和[Int16]同样适用,但是一旦我将数据库更改为[Int]并将枚举类型更改为[Int32],错误就会消失。
为什么当99.9%的时间内的枚举不超过256个项目或者我错过了其他内容时,我需要将枚举值存储在4Byte(Int)数据字段而不是1Byte(Tinyint)中?
答案 0 :(得分:65)
如果有人有兴趣,问题是枚举的默认类型:
public enum MyEnumType
{ One, Two, Three, All }
由于枚举默认为 int ,因此[基础类型:{字节}]与[外部类型] {MyEnumType:Int}的类型不匹配,因此需要修复对于我原来的tinyint字段,你需要像这样定义你的枚举:
public enum MyEnumType : byte
{ One, Two, Three, All }
答案 1 :(得分:0)
您需要在Model和Enumerator中同时指定您使用tinyInt和Byte。
枚举器定义中的
public enum MyEnumType : byte
{ One, Two, Three, All }
然后在Model类文件中
[Column(TypeName = "tinyint")]
public MyEnumType? MyEnum { get; set; }