framework first enum entity-framework-5 sqldatatypes

entity-framework-5 - first - enum entity framework



Tinyint(byte), SmallInt(Int16) no es compatible con Enum en EF5 (1)

Usando el primer diseño de la base de datos y teniendo una columna tinyint (o smallint):

[MyEnumColumn] [tinyint] NOT NULL

Asigné esta columna a Enum Type en EDM con

External Type: NSpace.MyEnumType Name:MyEnumType UnderlyingType:Byte

Donde NSpace.MyEnumType se define así:

public enum MyEnumType { One, Two, Three, All }

Solo para obtener este error al intentar cargar la entidad desde el contexto:

El esquema especificado no es válido. Errores:

No se pudo encontrar ningún tipo de capa de objeto correspondiente para el tipo conceptual ''EntityDataModel.MyEnumType''.

La siguiente información puede ser útil para resolver el error anterior:

El tipo subyacente del tipo de enumeración CLR no coincide con el tipo subyacente del tipo de enumeración EDM.

Lo mismo se aplica si uso [Smallint] e [Int16] pero una vez que cambie la base de datos a [Int] y el tipo de enumeración a [Int32], el error desaparece.

¿Por qué necesito almacenar el valor de enumeración en el campo de datos 4Byte (Int) en lugar de 1Byte (Tinyint) cuando las enumeraciones en el 99.9% del tiempo no tienen más de 256 elementos o me falta algo más?


Bueno, si a alguien le interesa, el problema está en el tipo predeterminado de enumeración:

public enum MyEnumType { One, Two, Three, All }

Dado que la enumeración tiene el valor predeterminado de escribir int , [Tipo subyacente: { Byte }] no coincide con el tipo de [Tipo externo] {MyEnumType: Int}, por lo tanto, para corregirlo en mi campo tinyint original, debe definir su enumeración de la siguiente manera:

public enum MyEnumType : byte { One, Two, Three, All }