NHibernate: utilisation de IEnumerable comme type de collection se traduit par erreur
-
26-09-2019 - |
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.ISet
1 [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.
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.