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 }