Nhibernate не сохраняет набор строк

Я не новичок в nhibernate, но я не могу заставить его сохранять / обновлять коллекцию строк.

У меня есть сущность, и у этой сущности есть 3 набора строк (Iesi.ISet<string>).

Я вношу изменения в коллекции строк объекта и вызываю Session.Save, Session.Update, Session.SaveOrUpdate, ничего не работает.

Это все в трансляции nhibernate, транзакция совершается. Я вижу, как все это происходит в 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>

person Erick    schedule 22.06.2011    source источник


Ответы (1)


Я думаю, что проблема в атрибуте inverse="true" в ваших заданных сопоставлениях. Это сообщает NHibernate, что другая (одна) сторона отношения будет проверена на предмет изменений при сбросе сеанса. С набором строк невозможно связать строку с родительским элементом, кроме как путем добавления ее в коллекцию. Попробуйте удалить атрибут inverse="true" или установить для него значение false (по умолчанию).

person Jamie Ide    schedule 22.06.2011
comment
Спасибо, что все исправлено. Я всегда задавался вопросом, когда было бы уместно установить инверсию на false, мне это никогда не было раньше. - person Erick; 22.06.2011