2013-04-11 16 views
6

Mam taką sytuację:Automapping dziedziczenia z Fluent NHibernate

public namespace ANamespace 
{ 
    public abstract class ABase:IABase 
    { 
     //properties 
    } 

    public abstract class A : ABase 
    { 
     //properties 
    } 

    public class A1 : A 
    { 
     //properties 
    } 

    public class A2 : A 
    { 
     //properties 
    } 
} 

Jeśli używam tego kodu mapowania:

AutoMap 
    .AssemblyOf<ABase>() 
    .Where(e => e.Namespace == "ANamespace") 
    .IncludeBase<A>().IgnoreBase<ABase>(); 

tylko tworzona jest tabela (z poniżać i A właściwości). Jeśli usuniemy IncludeBase(), zostaną utworzone A1 i A2 (ze wszystkimi właściwościami).

AutoMap 
    .AssemblyOf<ABase>() 
    .Where(e => e.Namespace == "ANamespace") 
    .IgnoreBase<ABase>(); 

Jak napisać mapowania mieć tabele dla klas A (z wszystkimi właściwościami A i poniżać), A1 i A2 (o specyficznych właściwościach) w mojej bazy danych, ale nie dla poniżać klasy?

Odpowiedz

2

Po trzech dniach znalazłem rozwiązanie tego problemu. Nie wystarczy mieć IncludeBase<T>(). Musisz również mapować klasę bazową. Więc rozwiązanie jest:

AutoMap 
    .AssemblyOf<ABase>() 
    .Where(type=>type.IsSubclassOf(typeof(A)) || type==typeof(A)) 
    .IncludeBase<A>(); 

Mam nadzieję, że pomoże to jakieś podobne problemy ...