Frage

Ich habe eine Klasse, die eine ISet als Sammeltyp verwendet wie folgt:

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

Ich will nicht die Sammlung selbst in der Lage sein, von außen verändert werden. Wenn ich jedoch der Unterkunft Typ IEnumerable ändern wie folgt:

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

Dann, wenn ich versuche, diese Klasse zu verwenden ich den NHibernate Fehler:

System.InvalidCastException. Kann nicht Gussobjekt des Typs 'NHibernate.Collection.Generic.PersistentGenericBag1[Kctc.BusinessLayer.ProbateAssist.Entities.Contact]' to type 'Iesi.Collections.Generic.ISet1 [Kctc.BusinessLayer.ProbateAssist.Entities.Contact]

Was soll das? Wie kann ich die öffentliche Version der Sammlung nur lesen?

NB Ich habe auch zu nutzen versucht Readonlycollection und die gleichen Fehler.

War es hilfreich?

Lösung

Sie verwenden wahrscheinlich Fluent Automapping, die den Typ als Tasche statt Set basiert auf dem Interface-Typ ist zu erraten. Sie werden es in diesem Fall außer Kraft setzen müssen.

IEnumerable<T> funktioniert gut, wenn manuell oder mit XML-Zuordnung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top