6

我需要在我的班级中映射一个可为空的枚举,但我遇到了异常。

NHibernate.PropertyAccessException: Invalid Cast (检查你的映射是否有属性类型不匹配); App.Model.Stock 的设置器 ---> System.InvalidCastException:指定的强制转换无效。

我已将问题缩小到一个特定的属性,我将在下面进行描述。

之前已在此处回答,但该解决方案链接到不再存在的页面。

这是我的代码,我已将其简化为仅包含我关心的部分。

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();

这似乎是很久以前的一个错误,并且有一个解决方法。我正在使用 Fluent 1.3.0.0 和 NHibernate 3.3.1.4000。

4

1 回答 1

11

您应该在CustomType<T>() 中指定枚举类型,例如CustomType<eColor>()。这将为您提供数据库中的整数。

于 2012-12-14T15:56:31.170 回答