【问题标题】:Nhibernate does not save a collection of stringsNhibernate 不保存字符串集合
【发布时间】:2011-06-22 17:57:49
【问题描述】:

我对 nhibernate 并不陌生,但我无法让它保存/更新字符串集合。

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

我对实体上的字符串集合进行了更改,并调用了Session.SaveSession.UpdateSession.SaveOrUpdate,没有任何效果。

这一切都在休眠事务中,事务正在提交。我可以看到这一切都发生在 NHProf 中,没有错误,没有例外。 Nhibernate 只是忽略我的收藏。

它可以很好地更新父实体。

是的,级联已设置。为了保存更新,我还尝试了 all-delete-orphan,这实际上是我想要的。

实体上的集合是Iese.Iset<string>。它们在实体的构造函数中使用 new 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>

【问题讨论】:

    标签: c# nhibernate


    【解决方案1】:

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

    【讨论】:

    • 谢谢,解决得很好。我一直想知道何时将 inverse 设置为 false 是合适的,我以前从未需要过。
    猜你喜欢
    • 2010-10-11
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 2017-01-24
    相关资源
    最近更新 更多