获取“无法将 PersistentGenericSet 转换为 ISet”错误
我收到此错误:
无法转换类型的对象 'NHibernate.Collection.Generic.PersistentGenericSet
1[IocWinFormTestEntities.People]' 输入“System.Collections.Generic.ISet
1[IocWinFormTestEntities.People]”。
实体:
public class Event
{
public Event()
{
this.People = new HashSet<People>();
}
public virtual Guid Id { get; private set; }
public virtual ISet<People> People { get; set; }
}
映射覆盖类:
public class EventMapOverride : IAutoMappingOverride<Event>
{
public void Override(AutoMapping<Event> mapping)
{
mapping.HasMany(c => c.People)
.AsSet()
.Cascade.AllDeleteOrphan();
}
}
从流畅的自动映射器生成 hbm:
<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>
出了什么问题?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您的问题是您在
System.Collections 中使用 ISet .Generic
命名空间,但 nHibernate 希望 ISet 为Iesi.Collections.Generic.ISet
。因此,将属性定义更改为“如果您想使用 .net 4
ISet<>
” 接口,请执行此 文章Your problem is you are using ISet in
System.Collections.Generic
namespace but nHibernate expects ISet to beIesi.Collections.Generic.ISet<>
. So change your property definition toIf you want to use .net 4
ISet<>
interface, go through this article最新的NHibernate使用Iesi.Collections.ISet,而不是System.Collections.Generic.ISet。您可以引用 Iesi 程序集或使用 System.Collections.Generic.ICollection:
ISet 接口继承自 ICollection。
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:
The ISet interface inherits from ICollection.
在 Nhibernate 4 中,使用
System.Collections.Generic.ISet<>
现在是 要走的路。此问题中显示的错误不应再发生。
With Nhibernate 4, using
System.Collections.Generic.ISet<>
is now the way to go.The error showcased in this question should no longer occur.