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

时间:2009-05-07 17:41:47

标签: c# nhibernate fluent-nhibernate

我无法使用NHibernate和Fluent NHibernate配置来保持可以为空的枚举。 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 ?,但没有任何效果。如果我将它设为非可空类型,它可以正常工作。

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

如果我无法完成这项工作,我将在我的枚举中添加一个未定义的值作为解决方法。

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

不确定如何正确完成,但这是另一种解决方法:

添加一个名为CostContributorEntity的类。该类将只具有属性:ID,类型为CostContributor。除非你想要,否则你不需要创建一个真实的表。

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

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