【发布时间】:2010-10-26 21:15:55
【问题描述】:
我有一个使用 ISet 作为集合类型的类,如下所示:
public class Client
{
private ISet<Contact> _contacts = new HashedSet<Contact>();
public virtual ISet<Contact> Contacts { get { return _contacts; } }
}
我不希望集合本身能够被外部修改。但是,如果我将属性的类型更改为 IEnumerable,如下所示:
public class Client
{
private ISet<Contact> _contacts = new HashedSet<Contact>();
public virtual IEnumerable<Contact> Contacts { get { return _contacts; } }
}
然后,每当我尝试使用此类时,我都会收到 NHibernate 错误:
System.InvalidCastException:无法转换类型为“NHibernate.Collection.Generic.PersistentGenericBag1[Kctc.BusinessLayer.ProbateAssist.Entities.Contact]' to type 'Iesi.Collections.Generic.ISet1[Kctc.BusinessLayer.ProbateAssist.Entities.Contact]”的对象。
什么给了?如何将集合的公开版本设为只读?
注意,我也尝试使用 ReadOnlyCollection,但得到了同样的错误。
【问题讨论】:
-
你应该展示你的 nhibernate 配置文件是什么样的(或者如果你使用 FluentNhibernate,你的 fluent 配置是什么)
标签: nhibernate set readonly-collection