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!

questionAnswers(4)

yourAnswerToTheQuestion