开发者

Getting "unable to cast PersistentGenericSet to ISet" error

开发者 https://www.devze.com 2023-03-11 13:41 出处:网络
I get this error: Unable to cast object of type \'NHibernate.Collection.Generic.PersistentGenericSet1[IocWinFormTestEntities.People]\'

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&开发者_C百科lt;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?


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


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.


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

The error showcased in this question should no longer occur.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号