Ошибка "Невозможно передать PersistentGenericSet в ISet"

Я получаю эту ошибку:

Невозможно запустить объект типа     'NHibernate.Collection.Generic.PersistentGenericSet 1[IocWinFormTestEntities.People]' to type 'System.Collections.Generic.ISet 1 [IocWinFormTestEntities.People]'.

Сущность:

public class Event 
{
    public Event()
    {
        this.People = new HashSet<People>();
    }
    public virtual Guid Id { get; private set; }

    public virtual ISet<People> People { get; set; }
}

Класс переопределения карты:

public class EventMapOverride : IAutoMappingOverride<Event>
{
    public void Override(AutoMapping<Event> mapping)
    {
        mapping.HasMany(c => c.People)
            .AsSet()
            .Cascade.AllDeleteOrphan();
    }
}

Сгенерированный hbm из свободного автомата:

<set cascade="all-delete-orphan" name="People">
    <key>
        <column name="Event_id" />
    </key>
    <one-to-many class="IocWinFormTestEntities.People, IocWinFormTestEntities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</set>

Что не так?

Ответ 1

Ваша проблема в том, что вы используете ISet в пространстве имен System.Collections.Generic, но nHibernate ожидает, что ISet будет Iesi.Collections.Generic.ISet<>. Поэтому измените определение своей собственности на

public virtual Iesi.Collections.Generic.ISet<People> People { get; set; }

Если вы хотите использовать интерфейс .net 4 ISet<>, пройдите через статью

Ответ 2

В последнем NHibernate используется Iesi.Collections.ISet, а не System.Collections.Generic.ISet. Вы можете либо ссылаться на сборку Iesi, либо использовать System.Collections.Generic.ICollection:

public virtual ICollection<People> People { get; set; }

Интерфейс ISet наследуется от ICollection.

Ответ 3

С Nhibernate 4, используя System.Collections.Generic.ISet<>, теперь путь.

Ошибка, представленная в этом вопросе, больше не должна появляться.