2011-11-04 88 views
0

一個一對多的關係,這裏是我的對象映射:需要幫助做與NHibernate

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="NHibernateTest" 
        namespace="NHibernateTest.Database"> 
    <class name="Employer"> 
     <id name="Id" type="Int64" column="id" unsaved-value="0"> 
      <generator class="identity"/> 
     </id> 
     <property name="Name"/> 
    </class> 
</hibernate-mapping> 

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="NHibernateTest" 
        namespace="NHibernateTest.Database"> 
    <class name="Employee">  
     <id name="Id" type="Int64" column="id" unsaved-value="0"> 
      <generator class="identity"/> 
     </id> 
     <property name="FirstName"/> 
     <property name="LastName"/> 
     <property name="Email"/> 
    </class> 
</hibernate-mapping> 

這裏是對象本身:我試圖使用

namespace NHibernateTest.Database { 
    public class Employee { 
     public virtual long Id { get; set; } 
     public virtual string FirstName { get; set; } 
     public virtual string LastName { get; set; } 
     public virtual string Email { get; set; } 
    } 

    public class Employer { 
     public virtual long Id { get; set; } 
     public virtual string Name { get; set; } 
     public virtual IList<Employee> Employees { get; set; } 
    } 
} 

SchemaExport實用程序生成架構,但無法弄清楚如何編寫IList的映射。從我接觸Hibernate for Java開始已經很長時間了,我發現NHibernate的一對多文檔有點難以遵循。如果有人可以寫這個映射,我會非常感激。

+0

什麼是各個表的名稱以及Employee表中的哪個字段是Employer.Id外鍵? –

回答

1

我猜Employee表和Employer.Id外鍵的名字,但這裏是我會怎麼做:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="NHibernateTest" 
        namespace="NHibernateTest.Database"> 
    <class name="Employer"> 
     <id name="Id" type="Int64" column="id" unsaved-value="0"> 
      <generator class="identity"/> 
     </id> 
     <property name="Name"/> 
     <bag name="Employees" table="Employees" > 
      <key column="EmployerId"></key> 
      <one-to-many class="Employee"></one-to-many> 
     </bag> 
    </class> 
</hibernate-mapping> 

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="NHibernateTest" 
        namespace="NHibernateTest.Database"> 
    <class name="Employee">  
     <id name="Id" type="Int64" column="id" unsaved-value="0"> 
      <generator class="identity"/> 
     </id> 
     <property name="EmployerId" /> 
     <property name="FirstName"/> 
     <property name="LastName"/> 
     <property name="Email"/> 
    </class> 
</hibernate-mapping> 

這裏的.NET代碼:

namespace NHibernateTest.Database { 
    public class Employee { 
     public Employee(Employer employer) { EmployerId = employer.Id; } 
     protected Employee() {} // nHibernate needs access to a parameterless constructor. 
     public virtual long Id { get; set; } 
     protected virtual long EmployerId { get; set; } 
     public virtual string FirstName { get; set; } 
     public virtual string LastName { get; set; } 
     public virtual string Email { get; set; } 
    } 

    public class Employer { 
     public virtual long Id { get; set; } 
     public virtual string Name { get; set; } 
     public virtual IList<Employee> Employees { get; set; } 
    } 
} 
+0

注意給別人誰看到這一點,我必須以使其工作增加了cascade =「all」來的行李標籤。 –