Entity Framework 5 - Discriminador basado en Enum para clases derivadas
Tengo lo siguiente (abreviado para mayor claridad): una enumeración, una clase base con esa enumeración y dos clases derivadas que establecen la enumeración en un valor específico.
public enum MyEnum
{
Value1, Value2
}
public class MyBaseClass
{
public MyEnum { get; protected set; }
}
public class DerivedOne: MyBaseClass
{
public DerivedOne { MyEnum = MyEnum.Value1; }
}
public class DerivedTwo: MyBaseClass
{
public DerivedTwo { MyEnum = MyEnum.Value2; }
}
Lo que quiero hacer es que Entity Framework 5 distinga automáticamente entre DerivedOne y DerivedTwo,con un discriminador basado en el valor MyEnum. Debería poder hacer esto porque, por convención, cada MyEnum == MyEnum.Value1 representa a DerivedOne, y MyEnum == MyEnum.Value2 representa a DerivedTwo.
Intenté esto en mi DbContext:
public class MyDbContext : DbContext
{
DbSet<MyBaseClass> MyBaseClass { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MyBaseClass>()
.Map<DerivedOne>(m => m.Requires(x => x.MyEnum == MyEnum.Value1));
base.OnModelCreating(modelBuilder);
}
}
Sin embargo, esto arroja la siguiente excepción InvalidOperationException:
La expresión 'x => (Convert (x.MyEnum) == 0)' no es una expresión de propiedad válida. La expresión debe representar una propiedad (...)
Editar: Creo que llegué un poco más lejos usando esto:
modelBuilder.Entity<MyBaseClass>().Map<DerivedOne>(m => m.Requires("MyEnum")
.HasValue((Int32)MyEnum.Value1));
Ahora recibo esta EntityCommandCompilationException:
Problema al asignar fragmentos a partir de la línea (...) Se asigna el miembro de condición 'MyBaseClass.MyEnum' con una condición que no sea 'IsNull = False'. Elimine la condición en MyBaseClass.MyEnum o elimínela de la asignación.
¿Alguna pista sobre cómo puedo resolver esto? ¡Gracias!