我收到此错误:
无法投射类型的对象 '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<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>
怎么了?
答案 0 :(得分:32)
您的问题是您在System.Collections.Generic
命名空间中使用ISet,但nHibernate希望ISet为Iesi.Collections.Generic.ISet<>
。因此,将属性定义更改为
public virtual Iesi.Collections.Generic.ISet<People> People { get; set; }
如果您想使用.net 4 ISet<>
界面,请完成此article
答案 1 :(得分:14)
最新的NHibernate使用Iesi.Collections.ISet,而不是System.Collections.Generic.ISet。您可以引用Iesi程序集或使用System.Collections.Generic.ICollection:
public virtual ICollection<People> People { get; set; }
ISet接口继承自ICollection。
答案 2 :(得分:4)
使用Nhibernate 4时,使用<div id="ElementDetails">
<label id = "ElementOne">Element_1 :</label>
<select id="elementOptionOne">
<label id = "ElementTwo">css Selector :</label>
<select id="elementOptionTwo">
</div>
现在是the way to go。
此问题中显示的错误不应再出现。