2010-12-28 4 views
1

Ich habe ein Szenario, in dem ich eine Basisklasse als eine Entität und dann eine andere Entität habe, die von der anderen Basisklasse abgeleitet ist. Beide haben eine Bedeutung in meiner Domäne und können getrennt verwendet werden.Das Laden einer Basisklasse über nhibernate verwendet fälschlicherweise Zuordnungen abgeleiteter Klassen

public class MyBaseClass 
{ 
    int ID { get; set; } 
    string Name { get; set; } 
} 

public class MyChildClass 
{ 
    string AdditionalField { get; set; } 
} 

ich haben beide abgebildet Fluent NHibernate ClassMap wie folgt aus:

public class MyBaseClassMap : ClassMap<MyBaseClass> 
{ 
    Id("MyBaseClassID"); 
    Map(x => x.Name); 
} 

public class MyChildClassMap : SubclassMap<MyChildClass> 
{ 
    Map(x => x.AdditionalField); 
} 

Was geschieht, wenn ich versuche, eine Kopie der Basisklasse zu holen, dessen die Zuordnung für das Kind-Klasse . Es ist so, als wüsste es nicht den Unterschied zwischen der Basis- und der Kindklasse oder die Wahl der falschen Zuordnung dafür. Ich habe dies bestätigt, indem ich die SQL-Anweisung und ihre Verknüpfung mit der untergeordneten Tabelle beobachtet und die zusätzliche Spalte abgerufen habe. Gibt es irgendeine Möglichkeit, die richtige Karte zu verwenden?

+0

"Auswahl ist nicht unterbrochen". NHibernate verhält sich genau wie dokumentiert. –

Antwort

2

Das ist die "Natur" von NHibernate.
Das von Ihnen beschriebene Verhalten wird als "polymorphe Abfragen" bezeichnet.

Da MyChildClass ein MyBaseClass ist, werden die MyChildClass-Instanzen ebenfalls abgerufen. Wenn Sie dieses Verhalten vermeiden möchten, können Sie sich vielleicht die Antworten in this topic ansehen. (Ich habe die polymorphe Abfragefähigkeit nie "deaktiviert").

+0

Das hat wunderbar funktioniert. Ich habe gerade Polymorphism.Explicit() zu meiner Kindklassenzuordnung hinzugefügt und es funktioniert jetzt korrekt. Vielen Dank! – Jason

Verwandte Themen