Nhibernate映射(父/子关系)需要帮助

Nhibernate映射(父/子关系)需要帮助,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我是Nhibernate的新手,正在使用Nhibernate 2.1.0 RC1。在C#中,我有以下课程: public class Application { public virtual int Id { get; set; } public virtual Applicant Applicant { get; set; } } public class Applicant { public virtual int Id { get; set; } publ

我是Nhibernate的新手,正在使用Nhibernate 2.1.0 RC1。在C#中,我有以下课程:

public class Application
{
    public virtual int Id { get; set; }
    public virtual Applicant Applicant { get; set; }
}

public class Applicant
{
    public virtual int Id { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
    public virtual IList<Application> Applications { get; set; } //maybe i should use set to eliminate duplicates
}
我有以下Nhibernate映射文件:

我需要双向映射:

  • 1名申请人可以有>1份申请
  • 1份申请属于1名申请人
我不知道如何将申请收集映射到申请人。请帮忙。谢谢 此外,我没有使用Fluent Nhibernate,因为它似乎还不支持Nhibernate 2.1.0 RC1

已更新(这是工作版本):



我还将从申请人对象中删除申请收集,以减少申请人提交的数千份申请的负载变化

你的继承权有问题。为什么申请者有一个申请集合,其中每个申请分配给另一个申请者?请重新检查您的对象和您试图建立的关系。您可以只拥有一个应用程序类和一个申请者类,一个应用程序可以拥有多个应用程序,就像在应用程序类和数据库中拥有申请者ID一样,您可以在应用程序和申请者之间建立多对一关系,表明可以有多个应用程序绑定到一个应用程序申请人。


<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="HelloWorld"
                   namespace="HelloWorld">

  <class name="Application" table="Applications">
    <id name="Id" column="ApplicationID" />
    <property name="Reference" />

    <many-to-one name="Applicant" column="ApplicantID" not-null="true"/>
  </class>

  <class name="Applicant" table="Applicants">
    <id name="Id" column="ApplicantID" />
    <property name="FirstName" column="FirstName" />
    <property name="LastName" column="LastName" />

    <set name="Applications" inverse="true">
      <key column="ApplicantID"/>
      <one-to-many class="Application"/>
    </set>
  </class>
</hibernate-mapping>

我需要双向映射(下面的映射有什么问题?)-1个申请者可以有>1个申请-1个申请属于1个申请者。我现在明白你的意思了。请看我正在阅读。谢谢。完成后,我将发布更新的映射文件。
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="HelloWorld"
                   namespace="HelloWorld">

  <class name="Application" table="Applications">
    <id name="Id" column="ApplicationID" />
    <property name="Reference" />

    <many-to-one name="Applicant" column="ApplicantID" not-null="true"/>
  </class>

  <class name="Applicant" table="Applicants">
    <id name="Id" column="ApplicantID" />
    <property name="FirstName" column="FirstName" />
    <property name="LastName" column="LastName" />

    <set name="Applications" inverse="true"> <!-- good to remove this mapping -->
      <key column="ApplicantID"/>
      <one-to-many class="Application"/>
    </set>
  </class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="HelloWorld"
                   namespace="HelloWorld">

  <class name="Application" table="Applications">
    <id name="Id" column="ApplicationID" />
    <property name="Reference" />

    <many-to-one name="Applicant" column="ApplicantID" not-null="true"/>
  </class>

  <class name="Applicant" table="Applicants">
    <id name="Id" column="ApplicantID" />
    <property name="FirstName" column="FirstName" />
    <property name="LastName" column="LastName" />

    <set name="Applications" inverse="true">
      <key column="ApplicantID"/>
      <one-to-many class="Application"/>
    </set>
  </class>
</hibernate-mapping>