2013-04-11 9 views
6

Ich habe diese Situation:Automapping Erbe mit 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 
    } 
} 

Wenn ich diesen Mapping-Code verwenden:

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

nur eine Tabelle (mit ABASE und A-Eigenschaften) erstellt wird. Wenn ich IncludeBase() lösche, werden A1 und A2 erstellt (mit allen Eigenschaften).

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

Wie Zuordnung schreiben für die Klassen A haben Tabellen (mit allen A und ABASE Eigenschaften), A1 und A2 (mit spezifischen Eigenschaften) in meiner Datenbank, aber nicht für die Klasse ABASE?

Antwort

2

Nach drei Tagen habe ich endlich eine Lösung für dieses Problem gefunden. Es reicht nicht, IncludeBase<T>() zu haben. Sie müssen auch die Basisklasse zuordnen. So ist die Lösung:

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

Ich hoffe, es wird einige ähnliche Probleme helfen ...