Hemos estado usando EF CF por un tiempo en nuestra solución. ¡Grandes fans! Hasta este punto, hemos estado usando un truco para admitir enumeraciones (creando un campo adicional en el modelo, ignorando el mapeo enum durring y asignando el campo extra a la columna en el DB que hubiéramos utilizado). Tradicionalmente hemos estado almacenando nuestras enumeraciones como cadenas (varchar) en el DB (lo hace agradable y legible). Ahora, con el soporte enum en EF 5 (Beta 2), parece que solo admite el mapeo de enumeraciones a columnas int en el DB .... ¿Podemos obtener EF 5 para almacenar nuestras enumeraciones como su representación de cadena?¿Puedo almacenar enumeraciones como cadenas en EF 5?
Donde "Type" es una enumeración de tipo DocumentType
public enum DocumentType
{
POInvoice,
NonPOInvoice,
Any
}
Traté de hacer un mapa usando:
public class WorkflowMap : EntityTypeConfiguration<Model.Workflow.Workflow>
{
public WorkflowMap()
{
ToTable("Workflow", "Workflow");
...
Property(wf => wf.Type).HasColumnType("varchar");
}
}
que pensé que iba a ser la bala mágica, pero ..
Eso acaba de lanzar:
Sch ema especificado no es válido. Errores: (571,12): error 2019: miembro La asignación especificada no es válida. El tipo 'Dodson.Data.DataAccess.EFRepositories.DocumentType [anulable = False, DefaultValue =]' de 'Tipo' miembro en el tipo 'Dodson.Data.DataAccess.EFRepositories.Workflow' no es compatible con 'SqlServer .varchar [Nullable = False, DefaultValue =, MaxLength = 8000, Unicode = False, FixedLength = False] ' del miembro' Type 'en el tipo' CodeFirstDatabaseSchema.Workflow '.
¿Cuál es su opinión?
Este es de hecho funciona, pero un poco hacky. –
Lo es. Quizás EF 7 tendrá algo. – Bryan
Buena solución.Un pequeño comentario, una vez que utiliza un método de extensión, puede escribir simple - value.ParseEnum(), en lugar de EnumExtensions.ParseEnum (valor). –
IFink