2009-06-15 8 views
1

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!

Antwort

1

Warum Eltern und Kind sind unterschiedlich Entitäten? Nur im Standard-Familienbegriff ist jeder nur eine Person - der Eltern/Kind ist eine Beziehung, die wahrscheinlich am besten durch eine Viele-zu-Viele-Beziehung in einer zweiten Tabelle modelliert wird

+0

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

+0

Fair genug - darum habe ich gefragt, anstatt anzunehmen, dass dein Design falsch war. –

+0

Was passiert, wenn ein Kind ein Elternteil wird? – Phill