2011-05-24 55 views
0

我有一个对象主题这也正是作为功能NHibernate:不能投PersistentGenericBag键入“System.Collections.Generic.ISet`

public class Topic : Entity { 
    public ISet<Topic> ChildTopics { get; internal set; } 
    public Topic ParentTopic { get; set; } 
    ... 
} 

我写的子主题定义自相关的层次一个表单(MVC3)生成一级主题的下拉列表(Html.DropDownListFor)(理论上这将最终将AJAX转换为第二级主题的第二个下拉列表),但是当它保存时,产生了广受欢迎的“无法施放...”例外(请参阅问题标题)。

通常的原因是您使用了List或Set而不是IList或ISet,但我使用的是ISet,并且它特别说明它无法投射到ISet。

这是一个集合的原因是因为你不希望一个主题不止一次成为另一个主题的子集。表映射通过流利的NH 自动映射创建与此覆盖正确的:

mapping.HasMany<Topic>(t => t.ChildTopics).AsSet().Inverse().KeyColumn("TopicId");

+0

也发布你的Fluent映射类。 – 2011-05-24 16:50:19

+0

我相信这是使用ASP.Net 4.0 System.Collections.Generic.SortedSet而不是Iesi.Collections.Generic.SortedSet的问题。 我目前有数十万个其他问题,所以我无法证实这完全是问题,但如果/当我确认情况是这样的时候,我会回来的。 – 2011-05-24 20:48:45

+0

IESI.Collections对新版本的NHibernate并不需要,它们可以使用.net框架的ISet接口。不知道如果有帮助。 – 2011-05-25 17:19:55

回答

0

在我的项目,例如NHibernate 3.2.0.400的,如果我使用System.Collections.Generic.ISet<T>,而不是Iesi.Collections.Generic.ISet<T>这个错误仍然出现。只需简单地更改参考文献即可完成最少的工作并解决问题。