问题
I get this error:
Unable to cast object of type 'NHibernate.Collection.Generic.PersistentGenericSet
1[IocWinFormTestEntities.People]' to type 'System.Collections.Generic.ISet
1[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