我的域类具有如下所示的集合:
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 ,这是因为集合需要作为接口(interface)暴露给 NHibernate,以便 NHibernate 可以注入(inject)它自己的集合类之一。
文章建议改用 IList,但遗憾的是,这个接口(interface)不包含 AsReadOnly() 方法,打乱了我只向外界公开只读集合的计划。
谁能建议我可以使用什么界面,满足相同要求的不同方法,或者不涉及这么多挫折的替代职业?
谢谢
大卫
最佳答案
您的回答是一个很好的解决方案,但我只是将集合公开为 IEnumerable<T>
.这种方法存在很小的风险,因为这些可以转换回 IList。这是否是可接受的风险取决于应用程序。
关于nhibernate - NHibernate 可以使用的只读集合属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3352841/