我有一個人類,然後有一個家庭課,我有一個屬性父親和一個屬性類型人的母親。NHibernate映射的一個類包含2個引用到同一個實體
我有一個Person和一個包含FamilyId,FatherId,MotherId的Family表的數據庫表,其中FatherId和MotherId是PersonId Person表中的外鍵。
你會如何去映射NHibernate的呢?
我有一個人類,然後有一個家庭課,我有一個屬性父親和一個屬性類型人的母親。NHibernate映射的一個類包含2個引用到同一個實體
我有一個Person和一個包含FamilyId,FatherId,MotherId的Family表的數據庫表,其中FatherId和MotherId是PersonId Person表中的外鍵。
你會如何去映射NHibernate的呢?
這種映射表示你的表。
public class Family
{
public virtual int Id { get; set; }
public virtual Person Mother { get; set; }
public virtual Person Father { get; set; }
}
<class name="Family">
<id name="Id" column="FamilyId">
<generator class="native" />
</id>
<many-to-one name="Mother" column="MotherId" />
<many-to-one name="Father" column="FatherId" />
</class>
也許你在給定的背景下有很好的設計理由。
從理論上講,您通常會選擇更鬆散耦合,靈活的基於角色的設計。
我的意思是說,一個人是一個「聚會」,而父親和母親是一個人可以扮演的「角色」(「派對」的其他角色可能是員工,客戶,朋友等等)。
我個人喜歡Peter Coad的DNC模式以解決這個特殊的設計問題。文章可以在這裏找到:http://edn.embarcadero.com/article/32543
幾年前,我曾在那裏我一個C#+ NHibernate的背景下出臺的DNC大型ERP系統上,所以我知道它在實踐中的作品,以及;-)
有關角色模式/原型的深入分析,請參閱書籍Enterprise patterns and MDA: building better software with archetype patterns and UML。
還有爲了在語言層面來解決這個問題,而不是使用模式正在進行的研究,被稱爲DCI:http://www.artima.com/articles/dci_visionP.html
@Martin感謝您的好消息,我們將對此進行調查 – adriaanp 2010-03-03 19:44:27