Question

J'ai une classe qui utilise un IPlacez comme type de collection comme ci-dessous:

  public class Client
  {
    private ISet<Contact> _contacts = new HashedSet<Contact>();
    public virtual ISet<Contact> Contacts { get { return _contacts; } }
  }

Je ne veux pas la collection elle-même pour pouvoir être modifiés en externe. Cependant, si je change le type de la propriété à IEnumerable comme ci-dessous:

  public class Client
  {
    private ISet<Contact> _contacts = new HashedSet<Contact>();
    public virtual IEnumerable<Contact> Contacts { get { return _contacts; } }
  }

Alors chaque fois que j'essaie d'utiliser cette classe je reçois l'erreur NHibernate:

System.InvalidCastException. Impossible de l'objet moulé du type 'NHibernate.Collection.Generic.PersistentGenericBag1[Kctc.BusinessLayer.ProbateAssist.Entities.Contact]' to type 'Iesi.Collections.Generic.ISet1 [Kctc.BusinessLayer.ProbateAssist.Entities.Contact]'

Qu'est-ce qui se passe? Comment puis-je faire la version publique de la collection en lecture seule?

NB J'ai aussi essayé d'utiliser ReadOnlyCollection, et obtenir la même erreur.

Était-ce utile?

La solution

Vous utilisez probablement AutoMapping Fluent, qui est le type devinant comme sac au lieu de Définie en fonction du type d'interface. Vous devrez le remplacer dans ce cas.

IEnumerable<T> fonctionne correctement lors du mappage manuellement ou avec XML.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top