我想要映射一对多的对象Person和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;}
... }我不想在address中包含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 (默认值为-1、0等)的PersonAddress。
在我找到的示例中,指定了从子到父的反向引用
发布于 2010-04-27 22:38:19
试试这个:
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; }
... }你应该有对这个人的引用,而不仅仅是一个PersonId。如果您在使用.hbm.xml映射文件时遇到困难,可以考虑使用Fluent NHibernate。它的自动映射功能就像一个护身符。
在NHibernate上也有一个video series,它很好地涵盖了这个主题。
发布于 2010-04-27 22:24:57
刚刚回答了here
https://stackoverflow.com/questions/2721783
复制相似问题