2011-02-22 131 views
0

分類和子類別具有1對多的關係。在類別的更新模式中,我想要刪除所有現有的子類別並重新插入新的類別(根據場景的需要)。刪除是精細發生,但是新的子記錄越來越重複的(如果我對兒童2個新記錄,操作插入2點+ 2的記錄)nhibernate - 在更新父項時複製新的子記錄插入

ISession session = NHibernateHelper.GetCurrentSession().GetSession(EntityMode.Poco); 
     using (var tx = session.BeginTransaction()) 
     { 
      List<Vtsubcategory> oovtsc = new List<Vtsubcategory>(); 
      oovtsc = oVtcategory.FkTocategory.Where(e => e.IdvtSubCategory != 0).ToList(); 
      foreach (Vtsubcategory ooVtsubcategory in oovtsc) 
      { 
       oVtcategory.FkTocategory.Remove(ooVtsubcategory); 
       session.Delete(ooVtsubcategory); 
      } 
      session.SaveOrUpdateCopy(oVtcategory); 
      session.Flush(); 
      if (tx.IsActive) 
      { 
       tx.Commit(); 
      } 
     } 

我估計是在插入存儲模式的子記錄(因爲它們是新的),並且在更新(父)模式下插入2個。不知道這是否屬實,以及如何解決它。

映射是

<class name="Vtcategory" table="`vtcategory`" lazy="false"> 
<id name="IdvtCategory" column="`idvtCategory`" type="int"> 
    <generator class="native" /> 
</id> 
<property type="string" length="100" name="Catname" column="`catname`" /> 
<property type="string" length="45" name="Catshortname" column="`catshortname`" /> 
<property type="DateTime" name="Crdt" column="`crdt`" /> 
<property type="string" length="45" name="Crby" column="`crby`" /> 
<bag name="FkTocategory" inverse="false" lazy="true" cascade="all"> 
    <key column="`catid`" /> 
    <one-to-many class="AMSDAL.Vtsubcategory,AMSDAL" /> 
</bag> 

<class name="Vtsubcategory" table="`vtsubcategory`" lazy="false"> 
<id name="IdvtSubCategory" column="`idvtSubCategory`" type="int"> 
    <generator class="native" /> 
</id> 
<property type="string" length="100" name="Subcatname" column="`subcatname`" /> 
<property type="string" length="45" name="Subcatshortname" column="`subcatshortname`" /> 
<property type="DateTime" name="Crdt" column="`crdt`" /> 
<property type="string" length="45" name="Crby" column="`crby`" /> 
<many-to-one name="Catid" cascade="none" column="`catid`" /> 

回答

0

你需要作爲逆的關係的一個側標記。這通常是一個一對多的一面:

<bag name="FkTocategory" inverse="true" lazy="true" cascade="all"> 
    <key column="`catid`" /> 
    <one-to-many class="AMSDAL.Vtsubcategory,AMSDAL" /> 
</bag> 
+0

感謝傑米,但是這個建議並沒有幫助我,也留下孩子的FK參考ID作爲NULL。 – Lakshmish 2011-02-23 04:25:20

0

馬克包包上的級聯是all-delete-orphan而非all。然後在你的代碼中,你可以將新的子類別分配給FkToCategory屬性。這將確保所有孤立的子類別將被NHibernate自動刪除。

相關問題