Я использую 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>