2009-07-05 9 views
1

Zur Zeit habe ich die folgenden Klassen:NHibernate Vererbung Frage

Klasse Artikel mit Eigenschaften-ID, Titel und Körper Klasse Frage: Artikel mit einer zusätzlichen PostedBy Eigenschaft

Dann habe ich eine Tabelle Artikel mit der oben genannten Eigenschaften und eine Tabelle namens Fragen mit einer ID ein Fremdschlüssel ArticleID und eine PostedBy. Beide sind in verschiedenen Schemas

Ich würde gerne wissen, wie meine Abbildungen aussehen werden, um diese Beziehung darzustellen. Beide Klassen befinden sich in verschiedenen Assemblies und ich würde sehr ungern Fragenlogik in Artikelklasse/Mapping und deren Assemblierung einfügen.

Antwort

2

NHibernate unterstützt drei grundlegende Vererbungsstrategien.

  1. Tabelle pro Klassenhierarchie
  2. Tabelle pro Unterklasse
  3. Tabelle pro Betonklasse

Es klingt wie Sie für die Tabelle pro Unterklasse Strategie suchen, wie Sie eine Tabelle für Ihre Artikel Klasse und eine weitere Tabelle für die zusätzlichen Eigenschaften in der Unterklasse Frage. Die Zuordnung sieht möglicherweise in etwa so aus:

<class name="Article" table="Article"> 
    <id name="Id" type="Int64" column="ArticleId"> 
     <generator class="native"/> 
    </id> 
    <property name="Title" column="Title"/> 
    <property name="Body" column="Body"/> 
    ... 
    <joined-subclass name="Question" table="Question"> 
     <key column="ArticleId"/> 
     <property name="PostedBy" column="PostedBy"/> 
     ... 
    </joined-subclass> 
</class> 

Dies entspricht jedoch nicht Ihrem Wunsch, die Zuordnungen vollständig getrennt zu halten. Sie könnten völlig getrennte Zuordnungen haben, aber dies könnte einige Nebenwirkungen haben, da die Frage als reiner Artikel statt als Frage geladen werden kann. Mit separater Zuordnung wäre die Artikelklasse wie erwartet einfach. Die Question-Klasse würde eine Verknüpfung enthalten, um auf die in der Artikeltabelle gespeicherten Eigenschaften zuzugreifen.

<class name="Article" table="Article"> 
    <id name="Id" type="Int64" column="ArticleId"> 
     <generator class="native"/> 
    </id> 
    <property name="Title" column="Title"/> 
    <property name="Body" column="Body"/> 
    ... 
</class> 

<class name="Question" table="Question"> 
    <id name="Id" type="Int64" column="QuestionId"> 
     <generator class="native"/> 
    </id> 
    <property name="PostedBy" column="PostedBy"/> 
    ... 
    <join table="Article"> 
     <key column="ArticleId"/> 
     <property name="Title" column="Title"/> 
     <property name="Body" column="Body"/> 
    </join> 
</class>