NHibernate一对多映射

时间:2010-04-27 13:56:21

标签: .net nhibernate

我想将一个对象映射到多个对象 和PersonAddress

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;}
...     }

我不想在地址中有人物对象属性。它会创建循环引用,而不是我的应用程序所必需的。

映射文件如下:

<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的PersonAddress(默认为-1,0等)。

在我发现的样本中,从子项到父项指定了后引用

2 个答案:

答案 0 :(得分:1)

试试这个:

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; }
    ... }

您应该引用Person,而不仅仅是PersonId。 如果您对.hbm.xml映射文件有困难,请考虑使用Fluent NHibernate。它的自动映射功能就像魅力一样。

NHibernate上还有一个video series,很好地涵盖了这个主题。

答案 1 :(得分:-1)

刚回答here