Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting "unable to cast PersistentGenericSet to ISet" error

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?

like image 915
danyolgiax Avatar asked Jun 07 '11 23:06

danyolgiax


2 Answers

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

like image 144
Eranga Avatar answered Oct 09 '22 13:10

Eranga


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.

like image 14
eulerfx Avatar answered Oct 09 '22 14:10

eulerfx