.net NHibernate一对多映射

.net NHibernate一对多映射,.net,nhibernate,.net,Nhibernate,我想将一个对象映射到多个对象 和个人地址 public class Person{ public virtual int Id {get; set;} public virtual string FirstName {get; set;} public virtual ICollection<PersonAddress> PersonAddress { get; set; }} public class PersonAddress{ public virtual int Id {g

我想将一个对象映射到多个对象 和个人地址

public class Person{
public virtual int Id {get; set;} public virtual string FirstName {get; set;}
public virtual ICollection<PersonAddress> PersonAddress { get; set; }}

public class PersonAddress{
public virtual int Id {get; set;}
public virtual int PersonId {get; set;}
...     }
我不希望地址中有person对象属性。它创建循环引用,对我的应用程序来说不是必需的

映射文件如下所示:

<class name="Person"  table="Persons" >
    <id name="Id" type="Int32" column="PersonId">
        <generator class="identity"/>
    </id>
    <set name="PersonAddress" table="PersonAddress" lazy="true" fetch="join" outer-join="true" cascade="all-delete-orphan">
        <key column="PersonId"></key>
        <one-to-many class="PersonAddress"/>
    </set>  
</class>

<class name="PersonAddress"  table="PersonAddress" >
    <id name="Id" type="Int32" column="Id">
        <generator class="identity"/>
    </id>
    <property name="PersonId" column="PersonId" type="Int32"/>
    <property name="PhoneWork" column="PhoneWork" type="String"/>       
</class>
当尝试插入个人地址为的人时,我收到异常。因为它试图插入id无效的PersonalAddress默认值为-1、0等

在我发现的样本中,它被指定为从孩子到父母的反向引用刚回答的刚回答的尝试以下方法:

public class Person {
    public virtual int Id { get; set; }
    public virtual string FirstName { get; set; }
    public virtual IList<PersonAddress> PersonAddress { get; set; }
    ... }

public class PersonAddress {
    public virtual int Id { get; set; }
    public virtual Person Person { get; set; }
    ... }
你应该提到那个人,而不仅仅是一个人名。 如果您对.HB.xml映射文件有困难,请考虑使用。它的自动映射功能非常有效

还有一个关于NHibernate的网站,它很好地涵盖了这个主题。

试试这个:

public class Person {
    public virtual int Id { get; set; }
    public virtual string FirstName { get; set; }
    public virtual IList<PersonAddress> PersonAddress { get; set; }
    ... }

public class PersonAddress {
    public virtual int Id { get; set; }
    public virtual Person Person { get; set; }
    ... }
你应该提到那个人,而不仅仅是一个人名。 如果您对.HB.xml映射文件有困难,请考虑使用。它的自动映射功能非常有效


还有一个关于NHibernate的问题,它很好地涵盖了这个主题。

听起来类似于我不久前发布的一个问题:。看来你运气不好,但我祈求得到一个满意的答案!听起来像是我不久前发布的一个问题:。看来你运气不好,但我祈求得到一个满意的答案!我知道双向是可能的。但我在考虑没有它的可能性。据我所知,这是不可能的。我不知道这是否可能,但这样做毫无意义。为什么那个人会困扰你?我知道双向选择是可能的。但我在考虑没有它的可能性。据我所知,这是不可能的。我不知道这是否可能,但这样做毫无意义。“为什么那个人的财产让你烦恼?”埃里希利茨你知道什么比投反对票更有效率吗?实际上是在编辑答案。好吧,每当帖子更新时,我都会把dv拿出来。有一些链接是可以接受的,即MS文档,但在谷歌集团中提及内容可能与技术灭绝相媲美,因为在实际帮助人们和让信息清晰化方面,谷歌是地球上最糟糕的地方,而这正是SO真正擅长的。更新你自己的答案或者dv留下。埃里克,你认为我会对我3年多前写的一篇帖子投反对票而大发雷霆吗?IIRC,OP在这里和小组中交叉张贴,我先在那里回答。如果你认为你通过消极进取使Stackoverflow变得更好,那么请继续相信它。@EricHerlitz你知道什么比否决票更有效吗?实际上是在编辑答案。好吧,每当帖子更新时,我都会把dv拿出来。有一些链接是可以接受的,即MS文档,但在谷歌集团中提及内容可能与技术灭绝相媲美,因为在实际帮助人们和让信息清晰化方面,谷歌是地球上最糟糕的地方,而这正是SO真正擅长的。更新你自己的答案或者dv留下。埃里克,你认为我会对我3年多前写的一篇帖子投反对票而大发雷霆吗?IIRC,OP在这里和小组中交叉张贴,我先在那里回答。如果你认为你是通过被动的攻击来让Stackoverflow变得更好,那么请继续相信这一点。