0

nhibernateを使用してデータベースにアクセスし、andromdaがマッピングファイルを生成します。null許容データ型を使用していない限り、すべて正常に機能しています。私が試しているのは、Nullables.NHibernate.NullableInt32Type型のプロパティを持つエンティティを作成することです。私のデータベースには、「int NULL」(SQL Server)タイプの列と対応する関係があります。対応するクラスにも正しいデータ型があります(int?)。しかし、データベースの値を取得しようとすると、NHibernate.MappingExceptionが発生します。

NHibernate.MappingException:タイプNamespace.SummaryAttributeに無効なマッピング情報が指定されています。マッピングファイルでプロパティタイプの不一致を確認してください----> System.InvalidCastException:DieangegebeneUmwandlungistungü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に変更しても。

誰かが問題が何であるかについての手がかりを持っていますか?

4

1 に答える 1

5

typeマッピングからプロパティを削除するだけです。NHibernateは自分でタイプを理解するので、次のようにする必要があります。

<property name="DecimalPlaces">
    <column name="DECIMAL_PLACES" not-null="false" unique="false" sql-type="INT"/>
</property>
于 2011-10-14T12:07:58.077 に答える