nhibernate - NHibernate 可以使用的只读集合属性

标签 nhibernate collections fluent-nhibernate readonly-collection

我的域类具有如下所示的集合:

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/

相关文章:

c# - 错误 : 22001: value too long for type character varying(255)

sql-server - 如何让 NHibernate 停止使用 nvarchar(4000) 来插入参数字符串?

sql - 如何使用 NHibernate 处理来自 SQL Server 2008 的 TIME 数据类型?

sql-server-2008 - FluentNHibernate 查询排序规则

c# - 删除级联上的流畅 nhibernate 子类

mysql - 为什么 NHibernate SchemaUpdate 在 MySQL 中比在 MS SQL Server 中慢得多

.net - F# 使用牛津逗号连接字符串

java - Java HashMap 中的线程问题

java - 在没有值的情况下向 HashMap 添加键?

c# - 数据库的正确模型,每个用户都有一个表