NHibernate的:使用的IEnumerable作为集合类型导致错误
-
26-09-2019 - |
题
我有一种使用的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.ISet
1 [Kctc.BusinessLayer.ProbateAssist.Entities.Contact]'
是怎么回事?我怎样才能让采集的公版只读?
NB我也尝试过使用ReadOnlyCollection,并得到了同样的错误。
解决方案
您可能正在使用流利自动映射,这是猜测根据接口类型的类型如袋,而不是集。你必须覆盖它在这种情况下。
手动或使用XML映射时 IEnumerable<T>
工作正常。
不隶属于 StackOverflow