C# 为什么nhibernate 3.3没有';不允许在ICollection上使用私有setter?

C# 为什么nhibernate 3.3没有';不允许在ICollection上使用私有setter?,c#,.net,nhibernate,fluent-nhibernate,C#,.net,Nhibernate,Fluent Nhibernate,我将nhibernate 3.2升级到nhibernate 3.3,在我的域类中定义了许多虚拟成员,如下所示: public virtual ICollection<Movie> Movies { get; private set; } 现在,通过将setter更改为protected,我成功地解决了这个问题,但是,将Collection属性更改为带有backing字段的readonly也能解决这个问题,这让我感到惊讶 所以我有两个问题: 为什么NHibernate决定不允许使用私

我将nhibernate 3.2升级到nhibernate 3.3,在我的域类中定义了许多虚拟成员,如下所示:

public virtual ICollection<Movie> Movies { get; private set; }
现在,通过将setter更改为protected,我成功地解决了这个问题,但是,将Collection属性更改为带有backing字段的readonly也能解决这个问题,这让我感到惊讶

所以我有两个问题:

  • 为什么NHibernate决定不允许使用私人setter?它看起来不像是.net的技术限制,因为它以前是受支持的,我认为它不应该从设计的角度进行,因为我们应该使用集合Remove()、Add()等。。方法来操作它,但为什么允许受保护的和公共的setter呢

  • 为什么(以及如何)将只读属性与支持字段一起使用


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


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

    谢谢Firo。。你知道他们以前用的是什么,现在用的是什么吗?Fluent NHibernates defalut是castle动态代理,集成的(与ILmerge一起)是LinFu动态代理。但我不知道为什么林富有这样的限制/设计选择。您仍然可以将Castle与NHibernates适配器一起使用,但它不再受支持
    Following types may not be used as proxies:
    ClassName: method set_Movies should be 'public/protected virtual' or 'protected internal virtual'