C# 如何在NHibernate中映射可为空的枚举?

C# 如何在NHibernate中映射可为空的枚举?,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,我无法使用NHibernate和Fluent NHibernate配置来持久化可为null的枚举。NHibernate试图保存枚举的字符串表示形式,我得到了错误 System.Data.SqlClient.SqlException: Conversion failed when converting the nvarchar value 'VGS' to data type tinyint. 该属性定义为 public virtual CostContributor? Replacement

我无法使用NHibernate和Fluent NHibernate配置来持久化可为null的枚举。NHibernate试图保存枚举的字符串表示形式,我得到了错误

System.Data.SqlClient.SqlException: Conversion failed when converting the 
nvarchar value 'VGS' to data type tinyint.
该属性定义为

public virtual CostContributor? ReplacementContributor { get; private set; }
映射是

Map(x => x.ReplacementContributor).CustomTypeIs(typeof(CostContributor?));
我尝试了CustomTypeIs和CustomSqlTypeIs的每一种组合,包括替换int?还是字节?对于CostContributor?,但没有任何效果。如果我将其设置为不可为null的类型,它就可以正常工作

是否可以在NHibernate中映射可为空的枚举?或者这是NHibernate中的错误或不受支持的功能


如果我不能做到这一点,我将向枚举中添加一个未定义的值作为解决方法。

不确定如何正确执行,但这里有另一个解决方法:

添加一个名为CostContributorEntity的类。该类将只有CostContributor类型的属性ID。除非您愿意,否则不需要创建真正的表

在消费类中,将ReplacementContributor更改为CostContributorEntity类型,并将其映射为引用(x=>x.ReplacementContributor)


使用session.Load(CostContributor.Blahblah1)创建可分配给ReplacementContributor的CostContributorEntity实例。

这是一个实例。

此处提供的链接无效,但问题已在中得到解答