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

FluentNHibernate映射Dictionary时自定义TenthNm键的存储配置咨询

解决方案

你只需要在现有映射的基础上,调用.KeyType<T>()方法指定字典键对应的自定义UserType即可,修改后的映射代码如下:

HasMany(x => x.ExcitationCurve)
  .Table("PresetCurveExcitation")
  .KeyColumn("PresetCurveId")
  .AsMap<TenthNm>("Wavelength")
  .KeyType<TenthNmUserType>() // 新增这一行指定键的自定义转换类型
  .Element("Value");

说明

  • .KeyType<T>()方法的作用和单属性映射时的.CustomType<T>()完全一致,专门用于配置字典映射场景下键列的类型转换规则
  • 配置完成后NHibernate会调用你实现的TenthNmUserType完成TenthNm和int类型的互相转换,Wavelength列会自动生成为int类型,不会再被序列化为BLOB存储

兼容旧版本Fluent NHibernate的写法

如果你使用的Fluent NHibernate版本不支持上述.KeyType<T>()写法,可以改用.AsMap()的重载直接在索引列配置中指定自定义类型:

HasMany(x => x.ExcitationCurve)
  .Table("PresetCurveExcitation")
  .KeyColumn("PresetCurveId")
  .AsMap<TenthNm>(index => index.Column("Wavelength").CustomType<TenthNmUserType>())
  .Element("Value");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:54:05