4

我将 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 属性更改为带有支持字段的只读属性。

所以我有两个问题:

  1. 为什么 NHibernate 决定禁止使用私有设置器?它看起来不像 .net 的技术限制,因为它以前受支持,我认为从设计的角度来看不应该这样做,因为我们应该使用 Collection Remove()、Add() 等方法来操作但是为什么要允许受保护的和公共的二传手呢?

  2. 为什么(以及如何)使用带有支持字段的只读属性?

4

1 回答 1

7

NHibernate 将代理生成器集成到它的程序集中,并且(如果我错了,请纠正我)使用的实现无法处理私有设置器。

但是,如果没有 setter,它会尝试搜索支持字段(否则它无法设置它)并且 readonly 是编译时功能,在使用反射时会被忽略。

于 2012-10-22T14:01:59.333 回答