NHibernate и целочисленные столбцы как версия - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь создать таблицу БД, используя файл отображения NHibernate * hbm.xml, в котором будет столбец контроля версий для проверки параллелизма.Столбец контроля версий должен иметь значение NULL.

Хотя база данных создана просто отлично, используя файл сопоставления в качестве ссылки, происходит следующее: * Первая запись вставляется со значением NULL в качестве версии * Обновление ранее вставленных записей завершается с ошибкой "Устаревшие данные "исключение

Другими словами, что бы я ни делал, столбец Версия всегда равен NULL.Я несколько новичок в управлении параллелизмом, использующем NHibernate, поэтому я не совсем понимаю, что я делаю неправильно ..

Если я использую метку времени в качестве версии, все работает просто отлично.Тем не менее, мое требование состоит в том, чтобы использовать целое число. Отсюда моя проблема.

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

<?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="Natrio" table="`Natrios`" 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">Natrios</param>
                <param name="optimizer">pooled-lo</param>
            </generator>
        </id>
        <version name="Version" column="`Version`" type="System.Nullable`1[[System.Int32, mscorlib]], mscorlib" generated="always" unsaved-value="0">
            <column name="`Version`" not-null="false" sql-type="int" />
        </version>
        <property name="Attribute" column="`Attribute`" type="String" not-null="false" length="100" />
    </class>
</hibernate-mapping>

Любые мысли и / или предложения будут с благодарностью!

1 Ответ

0 голосов
/ 07 июня 2019

Зачем вам нужен столбец обнуляемой версии? В любом случае я считаю, что проблема вызвана unsaved-value="0" в вашем отображении. В качестве значения по умолчанию для столбца, допускающего значение NULL, является null - NHibernate считает, что значение уже сгенерировано и поэтому никогда не назначается. Вам нужно установить его в null - unsaved-value="null ", чтобы он работал с обнуляемыми столбцами. И unsaved-value="0" имеет смысл для необнуляемых типов. Но лучше полностью пропустить этот атрибут и разрешить NHibernate для s

Другая проблема с атрибутом generated. Речь идет о генерации БД, поэтому always означает, что это значение автоматически генерируется БД. Вы должны удалить его или указать как generated="never".

Я считаю, что следующее отображение должно работать для вас:

<version name="Version">
    <column name="`Version`" not-null="false" sql-type="int" />
</version>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...