Ich habe die folgenden (abgekürzt für die Klarheit) - eine Enum, eine Basisklasse mit dieser Enumeration, und zwei abgeleitete Klassen, die die Enumeration auf einen bestimmten Wert setzen.Entity Framework 5 - Enum basierte Diskriminator für abgeleitete Klassen
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; }
}
Was ich tun möchte, ist 5 Entity Framework automatisch unterscheiden zwischen DerivedOne und DerivedTwo, mit einem MyEnum Wert basiert Scheidungs . Ich sollte in der Lage sein, dies zu tun, weil MyEnum == MyEnum.Value1 für DerivedOne steht und MyEnum == MyEnum.Value2 für DerivedTwo steht.
Ich habe versucht, dies in meinem 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);
}
}
Dies ist jedoch die folgende InvalidOperationException wirft:
Der Ausdruck 'x => (Rechnen (x.MyEnum) == 0)' nicht ist ein gültiger Eigenschaftsausdruck Der Ausdruck sollte eine Eigenschaft darstellen (...)
Edit: Ich glaube, ich habe ein wenig weiter dies mit:
modelBuilder.Entity<MyBaseClass>().Map<DerivedOne>(m => m.Requires("MyEnum")
.HasValue((Int32)MyEnum.Value1));
Jetzt erhalte ich diese EntityCommandCompilationException:
Problem in Mapping-Fragmenten ab Zeile (...) Bedingung member 'MyBaseClass.MyEnum' mit einer anderen Bedingung als 'IsNull = False' ist zugeordnet. Entfernen Sie die Bedingung in MyBaseClass.MyEnum, oder entfernen Sie sie aus dem Mapping.
Irgendwelche Hinweise, wie ich das lösen kann? Vielen Dank!