过去可以使用NHibernate将私有设置器映射自动属性,但从版本3.2开始不再是这种情况(不是没有替换实体验证器),请参阅NH dev discussion。
我理解protected
要求,但为什么internal
?这打破了封装,只是感觉很脏。
唯一的选择是回到支持领域吗?
更新:令人尴尬但却是真实的,事实证明internal
不是必需的。因此,在回退到支持字段或使用受保护的setter并避免在构造函数或facing the risk of hard to track bugs中设置值之间,这是一个折腾。感谢Fabio和@Nexus指出我的错误。
答案 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});