NHibernate.MappingException возникает при использовании обнуляемых типов
Я использую 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 ответ
Просто удали type
свойство из отображений. NHibernate сам определит тип, поэтому вы должны иметь:
<property name="DecimalPlaces">
<column name="DECIMAL_PLACES" not-null="false" unique="false" sql-type="INT"/>
</property>