2011-06-22 86 views
1

我對nhibernate並不陌生,但我無法保存/更新字符串集合。Nhibernate不保存字符串集合

我有一個實體,這個實體有3個字符串集合(Iesi.ISet<string>)。

我對實體上的字符串集合進行了更改,並致電Session.Save,Session.Update,Session.SaveOrUpdate,沒有任何結果。

這是在一個nhibernate交易,交易正在提交。我可以看到這一切發生在NHProf,沒有錯誤,沒有例外。 Nhibernate根本無視我的收藏。

它更新了父實體。

是的,級聯設置。爲了保存更新,我也嘗試了所有的刪除孤兒,這實際上是我想要的。

實體上的集合是Iese.Iset<string>。它們在實體的構造函數中使用新的Iesi.Collections.Generic.HasheSet<string>()初始化。

我會在映射文件粘貼:

<?xml version="1.0" encoding="utf-8" ?> 
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NameRemovedV2.Web" namespace="NameRemovedV2.Web.Models"> 
     <class name="NameRemovedUser" table="NameRemovedUsers"> 
     <id name="NameRemovedUserID"> 
      <generator class="hilo"></generator> 
     </id> 
     <many-to-one cascade="save-update" class="NameRemovedSite" column="NameRemovedSiteID" name="Site" not-null="true" foreign-key="FK_NameRemovedSites_NameRemovedUsers"></many-to-one> 
     <property name="Username" not-null="true" unique="true" unique-key="UX_NameRemovedUsers"></property> 
     <property name="FirstName" not-null="false"></property> 
     <property name="LastName" not-null="false"></property> 
     <property name="EmailAddress" not-null="false"></property> 
     <property name="DealerCode" not-null="false"></property> 
     <property name="RegistrationDate" not-null="true"></property> 
     <set cascade="save-update" inverse="true" name="LeftSide" table="LeftSides"> 
      <key column="NameRemovedUserID" not-null="true" foreign-key="FK_NameRemovedUsers_LeftSides"></key> 
      <element column="ElementID" not-null="true"></element> 
     </set> 
     <set cascade="save-update" inverse="true" name="RightSide" table="RightSides"> 
      <key column="NameRemovedUserID" not-null="true" foreign-key="FK_NameRemovedUsers_RightSides" ></key> 
      <element column="ElementID" not-null="true"></element> 
     </set> 
     <set generic="true" cascade="save-update" inverse="true" name="Hide" table="Hides"> 
      <key column="NameRemovedUserID" not-null="true" foreign-key="FK_NameRemovedUsers_Hides" ></key> 
      <element column="ElementID" type="String" not-null="true"></element> 
     </set> 
     </class> 
    </hibernate-mapping> 

回答

2

我認爲這個問題是在集映射的inverse="true"屬性。這通知NHibernate在會話刷新時會檢查關係的另一(一)方面的變化。使用一組字符串,除了將字符串添加到集合中之外,沒有辦法將字符串關聯到父項。嘗試刪除inverse="true"屬性或將其設置爲false(默認)。

+0

謝謝,這很好地解決了它。我一直想知道什麼時候設置與false相反是適當的,我從來沒有需要過。 – Erick