NHibernate, один-к-одному отображение, каскадная вставка

У меня отношения один к одному между классом компании и классом CompanySettings. При создании нового объекта Компании (объект Компании создается в конструкторе компании для его свойства Настройки), а затем

SaveOrUpdate(session, companyObject)

Я ожидаю, что INSERT каскад от Компании к CompanySettings. Однако этого не происходит, если я не вызову SaveOrUpdate на объекте CompanySettings.

Картографические файлы, приведенные ниже:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"`>
  <class name="AST.Domain.Company, AST.Domain" table="Companies">
    <id name="EntityID" column="CompanyId">
      <generator class="guid.comb" />
    </id>
    <property name="CompanyName" />
    . . .
    <one-to-one name="Settings" class="AST.Domain.CompanySettings, AST.Domain"
                constrained="true" lazy="false" />
  </class>
</hibernate-mapping>

Мой картографический файл для класса Настройки компании:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="AST.Domain.CompanySettings, AST.Domain" table="CompanySettings">
    <id name="EntityID" column="CompanyId">
      <generator class="foreign">
        <param name="property">Company</param>
      </generator>
    </id>
    <property name="MaxUsers" />
    <one-to-one name="Company" class="AST.Domain.Company, AST.Domain" />
  </class>
</hibernate-mapping>

Ответ на: "NHibernate, один-к-одному отображение, каскадная вставка"

Количество ответов:2

Вы пробовали указать "--15-" на вашем one-to-one mapping? отображение?

Задумывались ли вы о отображении CompanySettings как "компонент" компании, а не отдельное лицо?

Разве это не так, что 'CompanySettings' является "объектом ценности", и должны быть отображены лучше в качестве компонента?

Делая это, вы можете поместить значения CompanySettings в ту таблицу, что и "Компания", но это будет рассматриваться как отдельный класс.

Поскольку это один-к-одному отображение, я думаю, что это лучший вариант для вашей модели данных, а также.

Тогда ваше отображение будет выглядеть примерно так:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"`>
  <class name="AST.Domain.Company, AST.Domain" table="Companies">
    <id name="EntityID" column="CompanyId">
      <generator class="guid.comb" />
    </id>
    <property name="CompanyName" />
    . . .
    <component name="Settings" class="AST.Domain.CompanySettings, AST.Domain">
        <property name="MaxUsers" />
    </component>
  </class>
</hibernate-mapping>

У вас действительно будет 2 отдельных объекта (компания и CompanySettings, и компания будет иметь объект "Companysettings", но настройки будут сохранены в таблице компании).

Или, есть ли какие-либо особые причины, почему вы положили CompanySettings в отдельный стол? Я имею в виду, это один-к-одному отношения так что это совершенно не обязательно (и имхо даже плохая практика :) ).

Установите каскадный атрибут один-к-одному в картографическом отображении компании.

Но, на другой ноте: