包含对同一实体的2个引用的一个类的NHibernate映射

包含对同一实体的2个引用的一个类的NHibernate映射,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我有一个person类,然后有一个family类,其中我有一个person类型的财产父亲和财产母亲 我有一个Person数据库表和一个包含FamilyId、FatherId、MotherId的Family表,其中FatherId和MotherId是Person表中PersonId的外键 您将如何在NHibernate中映射这一点?在给定的上下文中,您的设计可能有很好的理由 从理论上讲,采用更松散耦合、更灵活、基于角色的设计通常会更好 我的意思是,一个人是一个“当事人”,父亲和母亲是一个人可以扮演

我有一个person类,然后有一个family类,其中我有一个person类型的财产父亲和财产母亲

我有一个Person数据库表和一个包含FamilyId、FatherId、MotherId的Family表,其中FatherId和MotherId是Person表中PersonId的外键


您将如何在NHibernate中映射这一点?

在给定的上下文中,您的设计可能有很好的理由

从理论上讲,采用更松散耦合、更灵活、基于角色的设计通常会更好

我的意思是,一个人是一个“当事人”,父亲和母亲是一个人可以扮演的“角色”(当事人的其他角色可能是雇员、客户、朋友等等)

为了解决这个特殊的设计问题,我个人喜欢PeterCoad的DNC模式。可在此处找到一篇文章:

几年前,我在一个大型ERP系统上工作,我在C#+NHibernate环境中引入了DNC,因此我知道它在实践中也能工作;-)

要深入分析角色模式/原型,请阅读本书


还有一项正在进行的研究是为了在语言级别解决这个问题,而不是使用称为DCI的模式:

此映射表示您的表

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>
公共类族
{
公共虚拟整数Id{get;set;}
公共虚拟人母亲{get;set;}
公共虚拟人父{get;set;}
}