You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NHibernate中将可空枚举类型映射为整数类型?

问题原因

你出现转换异常的核心原因是:

  • 映射配置中指定type为Int32时,NHibernate会将数据库返回的整数值/空值映射为int?类型,但你的实体属性是ItemType?类型,.NET 没有提供int?到Nullable<枚举>的默认隐式转换规则,因此触发类型转换失败。
  • 非可空阶段能正常运行是因为非可空的枚举和int存在隐式转换,属于巧合可用的情况,并不符合规范映射逻辑。
  • 你尝试的System.Nullable1[[System.Int32]]`本质还是可空int类型,和你的可空枚举属性依然不匹配,因此无法解决问题。

正确映射配置

直接指定映射的type为你的自定义枚举类型即可,NHibernate原生支持枚举(包括可空枚举)和数据库整数的自动转换:

<property name="ItemType" type="PrlSystems.AccountingLibrary.Model.ItemType" column="ItemType" not-null="false" />

如果你的枚举类型定义在独立的类库中,需要补充程序集名称:

<property name="ItemType" type="PrlSystems.AccountingLibrary.Model.ItemType, PrlSystems.AccountingLibrary" column="ItemType" not-null="false" />

注意把上面的程序集名替换为你实际存放ItemType定义的程序集名称即可。

可选的通用写法

如果不想写全限定名,也可以使用NHibernate内置的可空枚举类型处理器:

<property name="ItemType" column="ItemType" not-null="false">
  <type name="NHibernate.Type.EnumType, NHibernate">
    <param name="enumClass">PrlSystems.AccountingLibrary.Model.ItemType</param>
  </type>
</property>

内容的提问来源于stack exchange,提问作者ActiveX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:42:02