私のドメイン クラスには、次のようなコレクションがあります。
private List<Foo> _foos = new List<Foo>();
public virtual ReadOnlyCollection<Foo> Foos { get { return _foos.AsReadOnly(); } }
これにより、クラス内から (フィールド _foos を使用して) 変更できる読み取り専用コレクションが得られます。
このコレクションは次のようにマッピングされます (Fluent NHibernate):
HasMany(x => x.Foos).KeyColumn("ParentClassId").Cascade.All().Inverse().Access.CamelCaseField(Prefix.Underscore);
このコレクションを使用しようとすると、次のようになります。
タイプ 'NHibernate.Collection.Generic.PersistentGenericBag 1[Foo]' to type 'System.Collections.Generic.List
1[Foo]' のオブジェクトをキャストできません。
Unable to cast object of type NHibernate.Collection.Generic.PersistentGenericBag to Listによると、NHibernate が独自のコレクション クラスの 1 つを注入できるように、コレクションをインターフェイスとして NHibernate に公開する必要があるためです。
この記事では、代わりに IList を使用することを提案していますが、残念ながら、このインターフェイスには AsReadOnly() メソッドが含まれていないため、読み取り専用コレクションのみを外部に公開するという私の計画が台無しになります。
代わりに使用できるインターフェイス、同じ要件を満たす別のアプローチ、またはそれほどフラストレーションを伴わない別のキャリアを提案できる人はいますか?
ありがとう
デビッド