Как объединить запросы на обновление в одну и ту же таблицу в NHibernate? - PullRequest
1 голос
/ 15 июля 2009

Я использую NHibernate 2.1 beta2.

Первый сценарий:

Мои объекты разделены на две части - заглушка и заглушка. Идея состоит в том, что когда из базы данных требуется набор объектов, выбираются только заглушки. Как только пользователь получает доступ к определенному объекту и если доступное поле принадлежит к части дополнения заглушки, то соответствующее дополнение заглушки извлекается из базы данных. Это еще не все, но остальное не имеет значения для моего вопроса.

Хотя заглушка и дополнение заглушки обозначают разные части одного и того же объекта, мы не могли понять, как выразить это разделение в одном отображении, поэтому существует два сопоставления - одно для части заглушки объекта и другого - для дополнения заглушки, которое реализовано как частный объект, вложенный в заглушку.

Еще две ноты:

  • Часть дополнения к заглушке не содержит поля версии, только заглушка. Изменение любого поля, будь то заглушка или дополнение заглушки, влияет на одно поле версии.
  • Наш клиент вообще не знает о DAL, что означает, что на стороне клиента нет сборок NHibernate. Объекты передаются на серверную часть, где они присоединяются к сеансу NHibernate.

Вопрос:

Поскольку существует два сопоставления (и, я полагаю, только одно поле версии), при обновлении полностью загруженного объекта (то есть объекта с загруженной заглушкой) NHibernate генерирует два оператора обновления, которые обычно идут для одной и той же таблицы. .

У нас проблема с этим. Можно ли объединить их в один оператор обновления?

Спасибо.

приписка

Вот пример файла сопоставления:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
  <class name="SampleProject.Entities.EntityA,SampleProject.Entities" lazy="false" table="EntityA" >
    <id name="Id" column="Id" type="int" >
      <generator class="native"  />
    </id>
    <version name="m_lastChanged" access="field" column="LastChanged" generated="always" type="Byte[]"/>
    <property name="Name" access="property" type="string"/>
    <component name="ParentId" class="SampleProject.Entities.EntityId,SampleProject.Entities">
      <property name="TypeAsDBValue" access="property" type="string" column="ParentType" />
      <property name="IdAsDBValue" access="property" type="string" column="ParentId" not-null="false"/>
    </component>
  </class>

  <class name="SampleProject.Entities.EntityA+StubComplement,SampleProject.Entities" table="EntityA" lazy="false" >
    <id name="OwnerId" column="Id" type="int" >
      <generator class="native"/>
    </id>
    <property name="Description" access="property" type="string"/>
  </class>
</hibernate-mapping>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...