Ich habe eine Reihe von Tabellen, die die aussehen wie folgt:NHibernate Erbe Mapping
Person - PersonID, FirstName, LastName, etc...<br/>
Family - FamilyID, etc...<br/>
Parent - PersonID, FamilyID, etc...<br/>
Child - PersonID, FamilyID, etc...<br/>
Contact- PersonID, etc...<br/>
Meine Objekthierarchie ist wie folgt aufgebaut (C#):
class Person
class Family
interface IFamilyMember
class Parent : Person, IFamilyMember
class Child : Person, IFamilyMember
class Contact : Person
NHibernate - Ich bin zur Zeit Abbilden jedes der Person über Subklassen Joined-Unterklasse, wie unten gezeigt (irrelevant Felder werden entfernt):
<!-- Parent -->
<joined-subclass name="Parent" table="Parent">
<key column="PersonID" />
<many-to-one name="Family" column="FamilyID" cascade="save-update" />
</joined-subclass>
<!-- Child -->
<joined-subclass name="Child" table="Child">
<key column="PersonID" />
<many-to-one name="Family" column="FamilyID" cascade="save-update" />
</joined-subclass>
<!-- Child -->
<joined-subclass name="Contact" table="Contact">
<key column="PersonID" />
</joined-subclass>
Das Problem ist, dass ich wirklich Abfragen in der Lage sein möchten auszuführen gegen die IFamilyMember-Schnittstelle und mit dem aktuellen Mapping, NHibernate erlauben keine HQL auszuführen Frage wie "Von IFamilyMember". Ich möchte auch in der Lage sein, nach anderen Kriterien zu wählen - "From IFamilyMember m wo m.Name.First = 'blah'. Wie würde ich diesen Satz von Klassen so abbilden, dass ich Familienmitglieder nach Namen usw. auswählen könnte. .? muss ich meine Klassenhierarchie ändern, dass IFamilyMember die Eigenschaften enthält, mit denen ich möchte abfragen (Name, etc ...)?
Danke für die Hilfe!
Ich versuchte zu entfernen Felder/Eigenschaften, die für die Diskussion irrelevant sind hild hat zusätzliche Felder, die zwischen ihnen und den anderen Typen, die von Person erben, nicht üblich sind. Diese Felder sind zahlreich genug und spezialisiert genug, dass sie nicht glauben, dass es ein gutes Design wäre, um Teil der Entität Person zu sein. – Krazzy
Fair genug - darum habe ich gefragt, anstatt anzunehmen, dass dein Design falsch war. –
Was passiert, wenn ein Kind ein Elternteil wird? – Phill