NHibernate.MappingException возникает при использовании обнуляемых типов - PullRequest
0 голосов
/ 14 октября 2011

Я использую nhibernate для доступа к моей базе данных, и andromda генерирует мои файлы сопоставления. Все работает нормально, пока я не использую типы данных, которые могут иметь значение null. Я пытаюсь создать объект со свойством типа Nullables.NHibernate.NullableInt32Type. Моя база данных имеет соответствующую связь со столбцом типа "int NULL" (SQL Server). Соответствующий класс также имеет правильный тип данных (int?). Но когда я пытаюсь получить значения базы данных, я получаю исключение NHibernate.MappingException:

NHibernate.MappingException: указана неверная информация о сопоставлении для типа Namespace.SummaryAttribute проверьте файл сопоставления для несоответствие типов собственности ----> System.InvalidCastException: Die angegebene Umwandlung ist ungültig.

<?xml version="1.0" encoding="UTF-8"?>
<hibernate-mapping
    xmlns="urn:nhibernate-mapping-2.2"
    default-cascade="none">

    <class
        name="Namespace.SummaryAttribute, Core"
        table="SUMMARY_ATTRIBUTE"
        dynamic-insert="false"
        dynamic-update="false"
        lazy="true">

        <id name="Id" type="Int64" unsaved-value="0">
            <column name="ID" sql-type="NUMERIC(19,0)"/>
            <generator class="native">
            </generator>
        </id>

        <property name="ShortName" type="String">
            <column name="SHORT_NAME" not-null="true" unique="false" sql-type="VARCHAR(255)"/>
        </property>

        <property name="LongName" type="String">
            <column name="LONG_NAME" not-null="true" unique="false" sql-type="VARCHAR(255)"/>
        </property>

        <property name="Description" type="String">
            <column name="DESCRIPTION" not-null="true" unique="false" sql-type="VARCHAR(255)"/>
        </property>

        <property name="IsVisible" type="Boolean">
            <column name="IS_VISIBLE" not-null="true" unique="false" sql-type="BIT"/>
        </property>

        <property name="DecimalPlaces" type="Nullables.NHibernate.NullableInt32Type, Nullables.NHibernate">
            <column name="DECIMAL_PLACES" not-null="false" unique="false" sql-type="INT"/>
        </property>
    </class>
</hibernate-mapping>

Без свойства "DecimalPlaces" все работает нормально. Даже когда я изменяю свойство на простой тип данных int.

Кто-нибудь знает, в чем может быть проблема?

1 Ответ

5 голосов
/ 14 октября 2011

Просто удалите свойство type из сопоставлений. NHibernate сам определит тип, поэтому вы должны иметь:

<property name="DecimalPlaces">
    <column name="DECIMAL_PLACES" not-null="false" unique="false" sql-type="INT"/>
</property>
...