首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate一对多映射

NHibernate一对多映射
EN

Stack Overflow用户
提问于 2010-04-27 21:56:21
回答 2查看 1.9K关注 0票数 2

我想要映射一对多的对象Person和PersonAddress

代码语言:javascript
复制
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对象属性。它创建循环引用,对我的应用程序来说不是必需的。

映射文件如下:

代码语言:javascript
复制
<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。

在我找到的示例中,指定了从子到父的反向引用

EN

回答 2

Stack Overflow用户

发布于 2010-04-27 22:38:19

试试这个:

代码语言:javascript
复制
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,它很好地涵盖了这个主题。

票数 1
EN

Stack Overflow用户

发布于 2010-04-27 22:24:57

刚刚回答了here

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2721783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档