Getting “unable to cast PersistentGenericSet to ISet” error

别来无恙 提交于 2019-12-04 08:52:37

问题


I get this error:

Unable to cast object of type 'NHibernate.Collection.Generic.PersistentGenericSet1[IocWinFormTestEntities.People]' to type 'System.Collections.Generic.ISet1[IocWinFormTestEntities.People]'.

The entity:

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

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

Map override class:

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

Generated hbm from fluent automapper:

<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>

What's wrong?


回答1:


Your problem is you are using ISet in System.Collections.Generic namespace but nHibernate expects ISet to be Iesi.Collections.Generic.ISet<>. So change your property definition to

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

If you want to use .net 4 ISet<> interface, go through this article




回答2:


The latest NHibernate uses Iesi.Collections.ISet, not System.Collections.Generic.ISet. You can either reference the Iesi assembly or use System.Collections.Generic.ICollection:

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

The ISet interface inherits from ICollection.




回答3:


With Nhibernate 4, using System.Collections.Generic.ISet<> is now the way to go.

The error showcased in this question should no longer occur.



来源:https://stackoverflow.com/questions/6272636/getting-unable-to-cast-persistentgenericset-to-iset-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!