获取“无法将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(); } public virtual Guid Id { get; private set; } public virtual ISet People { get; set; } } 

地图覆盖类:

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

从流畅的自动播放器生成的hbm:

       

怎么了?

您的问题是您在System.Collections.Generic命名空间中使用ISet ,但nHibernate希望ISet为Iesi.Collections.Generic.ISet<> 。 所以将属性定义更改为

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

如果您想使用.net 4 ISet<>界面,请阅读本文

最新的NHibernate使用Iesi.Collections.ISet,而不是System.Collections.Generic.ISet。 您可以引用Iesi程序集或使用System.Collections.Generic.ICollection:

 public virtual ICollection People { get; set; } 

ISet接口inheritance自ICollection。

使用Nhibernate 4,现在可以使用System.Collections.Generic.ISet<> 了 。

不应再出现此问题中显示的错误。