2012-10-08 48 views
0

一次我有兩個實體,如插入在兩個相關的表與NHibernate

public class Person 
     { 
      public int PersonId { get; set; } 
      public string Name { get; set; } 
      public int DataId { get; set; } 
    } 
    public class Data 
     { 
       public int DataId { get; set; } 
     public string details { get; set; } 
     public int PersnId{ get; set; } 
} 

當你看到這兩個表中的相互關係。我想要一個解決方案來同時在兩個表中插入數據。我1插入人,2插入數據,然後更新人,它的工作原理,但我正在尋找方式來消除更新。 我的人表映射:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="TestNhibrinate" assembly="TestNhibrinate"> 
    <class name="TestNhibrinate.Entites.Person" table="Person" lazy="false"> 
     <id name="PersonId" column="PersonId" type="int" > 
      <generator class="identity" /> 
     </id> 
     <property name="Name" column="Name" type="String" length="50" /> 
     <many-to-one name="Adress" class="TestNhibrinate.Entites.Adress" column="AdressId"/>   
    </class> 
</hibernate-mapping> 

和相同的映射數據。

回答

0

你的實體應該是這樣的:

 public class Person 
      { 
      public Person() 
      { 
       DataCollection = new List<Data>(); 
      } 
       public int PersonId { get; set; } 
       public string Name { get; set; } 
       public int DataId { get; set; } 
       public IList<Data> DataCollection{get;set;} 

       public void AddData(Data item) 
       { 
        if(!DataCollection.Contains(item)) 
        { 
         DataCollection.Add(item); 
        } 
       } 
     } 
     public class Data 
      { 
        public int DataId { get; set; } 
      public string details { get; set; } 
      public Person Person{ get; set; } 
    } 

這樣你創建一個一對多的關係,從人到的數據。如果您在添加一些數據後保存人員實體,則數據也將被保留。這取決於您的級聯選項offcourse。

我不知道如何映射這與XML映射,因爲我總是使用Fluent或自動映射。