我无法使用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中的错误或不支持的功能?
如果我无法完成这项工作,我将在我的枚举中添加一个未定义的值作为解决方法。
答案 0 :(得分:2)
答案 1 :(得分:0)
不确定如何正确完成,但这是另一种解决方法:
添加一个名为CostContributorEntity的类。该类将只具有属性:ID,类型为CostContributor。除非你想要,否则你不需要创建一个真实的表。
在使用类中,将ReplacementContributor更改为CostContributorEntity类型,并将其映射为引用(x => x.ReplacementContributor);
使用session.Load(CostContributor.Blahblah1)创建可分配给ReplacementContributor的CostContributorEntity实例。