我从 nhibernate 3.2 升级到 nhibernate 3.3,并且在我的域类中定义了很多虚拟成员,如下所示:
public virtual ICollection<Movie> Movies { get; private set; }
升级后这停止工作,我得到这个异常:
Following types may not be used as proxies:
ClassName: method set_Movies should be 'public/protected virtual' or 'protected internal virtual'
现在,我设法通过将 setter 更改为 protected 来解决问题,但令我惊讶的是,将 Collection 属性更改为带有支持字段的只读属性也能解决问题。
所以我有两个问题:
为什么 NHibernate 决定禁止使用私有 setter?它看起来不像 .net 的技术限制,因为它以前受支持,我知道从设计的角度来看不应该这样做,因为我们应该使用 Collection Remove()、Add() 等方法来操作但是为什么要允许受保护的和公共的设置器呢?
为什么(以及如何)使用带有支持字段的只读属性有效?
NHibernate 将代理生成器集成到它的程序集中,并且(如果我错了,请纠正我)所使用的实现无法处理私有设置器。
但是,如果没有设置器,它会尝试搜索支持字段(因为否则它无法设置它),并且 readonly 是编译时功能,在使用反射时会被忽略。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)