我有一种使用的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]'

是怎么回事?我怎样才能让采集的公版只读?

NB我也尝试过使用ReadOnlyCollection,并得到了同样的错误。

有帮助吗?

解决方案

您可能正在使用流利自动映射,这是猜测根据接口类型的类型如袋,而不是集。你必须覆盖它在这种情况下。

手动或使用XML映射时

IEnumerable<T>工作正常。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top