フォームnhibernate3.2をnhibernate3.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'
これで、セッターを保護に変更することで問題を解決できましたが、Collectionプロパティをバッキングフィールドで読み取り専用に変更するとうまくいくことにも驚きました。
だから私は2つの質問があります:
NHibernateがプライベートセッターの使用を禁止することにしたのはなぜですか?以前にサポートされていた.netからの技術的制限のようには見えません。コレクションのRemove()、Add()などのメソッドを使用して操作する必要があるため、設計の観点からは実行しないでください。それでも、なぜ保護されたセッターとパブリックセッターを許可するのですか?
バッキングフィールドで読み取り専用プロパティを使用するのはなぜ(そしてどのように)機能するのですか?