2013-04-11 11 views
6

ho questa situazione:Automapping eredità con NHibernate Fluent

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 
    } 
} 

Se io uso questo codice di mappatura:

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

solo viene creata una tabella (con umiliare e A Proprietà). Se elimino IncludeBase(), vengono creati A1 e A2 (con tutte le proprietà).

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

Come scrivere mappatura per avere le tabelle per le classi A (con tutte le proprietà A e abase), A1 e A2 (con proprietà specifiche) nel mio database, ma non per l'abase di classe?

risposta

2

Dopo tre giorni ho finalmente trovato la soluzione a questo problema. Non è sufficiente avere IncludeBase<T>(). Devi anche mappare la classe base. Quindi la soluzione è:

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

Spero che vi aiuterà alcuni problemi simili ...