Nhibernate不保存字符串的集合

本文关键字:集合 字符串 保存 Nhibernate | 更新日期: 2023-09-27 18:00:08

我不是nhibernate的新手,但我无法使用它来保存/更新字符串集合。

我有一个实体,这个实体有3个字符串集合(Iesi.ISet<string>)。

我对实体上的字符串集合进行了更改,并调用了Session.SaveSession.UpdateSession.SaveOrUpdate,一切都不起作用。

这一切都在一个非自由交易中,交易正在进行中。我可以在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>

Nhibernate不保存字符串的集合

我认为问题在于集合映射中的inverse="true"属性。这会通知NHibernate,当刷新会话时,将检查关系的另一方(一方)的更改。对于一组字符串,除了将字符串添加到集合之外,没有任何方法可以将其与父字符串相关联。尝试删除inverse="true"属性或将其设置为false(默认值)。