为什么NHibernate需要“;受保护的内部“;汽车特性的可见性

本文关键字:可见性 汽车 受保护 NHibernate 需要 为什么 内部 | 更新日期: 2023-09-27 17:57:45

过去可以使用NHibernate将自动属性与私有setter进行映射,但从3.2版本开始,情况已不再如此(在不替换实体验证器的情况下),请参阅NH-dev讨论。

我理解protected的要求,但为什么是internal?这打破了封装,只是感觉很脏。

唯一的选择是回到后场吗?

更新:虽然令人尴尬,但事实证明internal不是必需的。因此,在返回支持字段或使用受保护的setter与避免在构造函数中设置值或面临难以跟踪的错误风险之间,这是一个悬而未决的问题。感谢Fabio和@Nexus指出我的错误。

为什么NHibernate需要“;受保护的内部“;汽车特性的可见性

Michael,

public string Foo { get; protected set; }应该仍然是可能的,开发人员讨论的是public string Foo { get; private set; },它可能会在使用惰性属性时导致错误。

NHibernate相当脏。它使用反射来访问属性和字段。

您甚至可以将private属性和字段映射为数据点。

NHibernate完全忽略了它需要访问的元素的可见性。

public class Class{
    public string Foo { get; private set; }
}
Property(class=> class.Foo);

然后,您需要在配置中关闭代理验证:

Config.Proxy(p => {p.Validation = false});