为什么NHibernate要求自动属性具有“受保护的内部”可见性?

时间:2011-05-24 18:06:42

标签: c# nhibernate

过去可以使用NHibernate将私有设置器映射自动属性,但从版本3.2开始不再是这种情况(不是没有替换实体验证器),请参阅NH dev discussion

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

唯一的选择是回到支持领域吗?

更新:令人尴尬但却是真实的,事实证明internal不是必需的。因此,在回退到支持字段或使用受保护的setter并避免在构造函数或facing the risk of hard to track bugs中设置值之间,这是一个折腾。感谢Fabio和@Nexus指出我的错误。

3 个答案:

答案 0 :(得分:6)

迈克尔,

public string Foo { get; protected set; }应该仍然可以,开发讨论是关于public string Foo { get; private set; },这可能会导致在使用延迟属性时出错。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

public class Class{

    public string Foo { get; private set; }

}

Property(class=> class.Foo);

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

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