Entity Framework 5 - Dyskryminator oparty na Enum dla klas pochodnych
Mam następujące (w skrócie) - wyliczenie, klasę podstawową z tym wyliczeniem i dwie klasy pochodne, które ustawiają wyliczenie na określoną wartość.
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; }
}
Chcę, aby Entity Framework 5 automatycznie rozróżniało DerivedOne od DerivedTwo,z dyskryminatorem opartym na wartości MyEnum. Powinienem być w stanie to zrobić, zgodnie z konwencją, każde MyEnum == MyEnum.Value1 reprezentuje DerivedOne, a MyEnum == MyEnum.Value2 reprezentuje DerivedTwo.
Próbowałem tego w moim 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);
}
}
Jednak powoduje to następujący wyjątek InvalidOperationException:
Wyrażenie „x => (Convert (x.MyEnum) == 0)” nie jest prawidłowym wyrażeniem właściwości. Wyrażenie powinno reprezentować właściwość (...)
Edytować: Wierzę, że trochę bardziej to wykorzystałem:
modelBuilder.Entity<MyBaseClass>().Map<DerivedOne>(m => m.Requires("MyEnum")
.HasValue((Int32)MyEnum.Value1));
Teraz otrzymuję ten wyjątek EntityCommandCompilationException:
Problem z mapowaniem fragmentów zaczynając od linii (...) Mapowany jest element warunku „MyBaseClass.MyEnum” z warunkiem innym niż „IsNull = False”. Usuń warunek na MyBaseClass.MyEnum lub usuń go z mapowania.
Jakieś wskazówki, jak mogę to rozwiązać? Dzięki!