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

FluentNHibernate映射选择:CamelCaseField与ReadOnlyPropertyThroughCamelCaseField

正确的FluentNHibernate映射选择及原因

先看给定的User类定义:

public class User {
  private IList<ActivationToken> _activationTokens;
  public virtual IReadOnlyList<ActivationToken> ActivationTokens => _activationTokens.AsReadOnly();
}

现在要从两个映射选项里选出正确的:
选项1:

HasMany( x => x.ActivationTokens ).Access.CamelCaseField( Prefix.Underscore );

选项2:

HasMany( x => x.ActivationTokens ).Access.ReadOnlyPropertyThroughCamelCaseField( Prefix.Underscore );

正确选项是第二个,原因如下:

  • User类里的ActivationTokens是只读属性,它仅返回私有字段_activationTokens的只读包装,本身不支持写入;但NHibernate需要操作底层可写的集合字段_activationTokens来完成数据持久化。
  • ReadOnlyPropertyThroughCamelCaseField(Prefix.Underscore)这个访问策略就是专门适配这种场景:它能识别到我们映射的是只读属性,自动关联到对应的私有驼峰式带下划线字段_activationTokens,让NHibernate直接操作这个可写字段完成数据读写,同时保留属性的只读特性。
  • 而第一个选项的CamelCaseField是直接将映射目标指向字段,但我们这里指定的映射路径是属性ActivationTokens,这个策略会导致NHibernate混淆属性和字段的关系——因为属性是只读的,NHibernate无法通过属性写入数据,直接映射字段又不符合我们通过属性暴露集合的设计,最终会引发持久化操作异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:52:04