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
相关产品推荐
相关产品推荐

