У меня есть таблица со столбцом Версия для проверки параллелизма, отображаемая следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="true" auto-import="false" assembly="New1.Backend" namespace="New1.BO">
<class name="VersionedTable" table="`VersionedTables`" schema="`dbo`">
<cache usage="read-write" />
<id name="Id" column="`Id`" type="System.Int32" >
<generator class="NHibernate.Id.Enhanced.TableGenerator">
<param name="increment_size">200</param>
<param name="segment_value">VersionedTables</param>
<param name="optimizer">pooled-lo</param>
</generator>
</id>
<version name="Version" column="`Version`" generated="never" ></version>
<property name="Attribute" column="`Attribute`" type="String" not-null="false" length="100" />
</class>
</hibernate-mapping>
Как видите, я использую столбец с именем Версия или Integer
Тип, как Версия.
Теперь это моя проблема (я объясню это с помощью пошагового примера):
Я открываю одну и ту же запись на двух разных страницах браузера.Из SQL Profiler я вижу, что их версия [1]
Я изменяю запись на первой странице.Мой SQL Profiler показывает, что SQL-запрос, который выполняется: update VersionedTable set Attribute='A', Version=2 where Id=[id] and Version=1
Обратите внимание, что версия была правильно увеличена до [2]
Теперь я перехожу квторое окно.Помните, что я уже загрузил предыдущую запись.Он думает, что Версия все еще [1].
Я изменяю значения и нажимаю «Сохранить».(Из данных моего действия Controller я также вижу, что версия, которую я получаю, является «устаревшей»: [1])
Теперь, что мне показывает мой SQL Profilerоднако: update VersionedTable set Attribute='B', Version=3 where Id=[id] and Version=2
(Ой !!!)
Обратите внимание, что каким-то образом при очистке процесс получил обновленное значение версии вместодержась за "несвежую" одну !!!Я не знаю как, когда или почему это происходит.Все, что я знаю, это то, что, хотя исключение StaleObject должно генерироваться , обе параллельные записи обновляются, обе изящно увеличивают версию!
У кого-нибудь есть идеи, почему это происходит и как я могу это остановить?Большое спасибо, заранее!