流畅的NHibernate映射可以为空的枚举

时间:2012-12-14 15:50:57

标签: nhibernate enums mapping nullable fluent

我需要在我的班级中映射一个可以为空的枚举,但我得到例外。

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

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

之前已回答here,但该解决方案会链接到不再存在的网页。

这是我的代码,我已将其缩小为仅包含我所关注的部分。

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。

1 个答案:

答案 0 :(得分:10)

您应该在CustomType&lt; T&gt;()中指定枚举类型,例如CustomType&LT;易彩&GT;()。这将为您提供数据库中的整数。