I have a class which uses an ISet as a collection type as below:
public class Client
{
private ISet<Contact> _contacts = new HashedSet<Contact>();
public virtual ISet<Contact> Contacts { get { return _contacts; } }
}
I don't want the collection itself to be able to be modified externally. However, if I change the property's type to IEnumerable as below:
public class Client
{
private ISet<Contact> _contacts = new HashedSet<Contact>();
public virtual IEnumerable<Contact> Contacts { get { return _contacts; } }
}
Then whenever I try to use this class I get the NHibernate error:
System.InvalidCastException: Unable to cast object of type 'NHibernate.Collection.Generic.PersistentGenericBag1[Kctc.BusinessLayer.ProbateAssist.Entities.Contact]' to type 'Iesi.Collections.Generic.ISet
1[Kctc.BusinessLayer.ProbateAssist.Entities.Contact]'.
What gives? How can I make the public version of the collection read only?
NB I've also tried to use ReadOnlyCollection, and get the same error.