6

クラスでnull許容の列挙型をマップする必要がありますが、例外が発生しています。

NHibernate.PropertyAccessException:無効なキャスト(プロパティタイプの不一致についてマッピングを確認してください); App.Model.Stockのセッター--->System.InvalidCastException:指定されたキャストが無効です。

問題を1つの特定のプロパティに絞り込みました。これについては、以下で説明します。

これは以前にここで回答されましたが、ソリューションはもう存在しないページにリンクしています。

これが私のコードですが、私が関係している部分だけを含むように縮小しました。

public enum eColor
{
    Red,
    Blue
}

public class Stock 
{
    public virtual eColor? Color { get; protected set; }
}

これが私のマッピングです(削除):

public class StockMap : ClassMap<Stock>
{
    Map(x => x.Color).CustomType<int>();
}

次のすべてを試しましたが、同じ結果になりました。

Map(x => x.Color).CustomType<int>();
Map(x => x.Color).CustomType<int?>();
Map(x => x.Color).CustomType<int>().Nullable();
Map(x => x.Color).CustomType<int?>().Nullable();

これはかなり前のバグのようで、回避策がありました。Fluent1.3.0.0とNHibernate3.3.1.4000を使用しています。

4

1 に答える 1

11

CustomType <T>()で列挙型を指定する必要があります(例:CustomType <eColor>())。これにより、データベース内の整数が得られます。

于 2012-12-14T15:56:31.170 に答える