我有一个对象主题,它是一个自我相关的层次结构,其中子主题被定义为
public class Topic : Entity {
public ISet<Topic> ChildTopics { get; internal set; }
public Topic ParentTopic { get; set; }
...
}
我正在编写一个表单(MVC3)来生成第一级主题的下拉列表(Html.DropDownListFor)(理论上这最终会将AJAX转换为第二级主题的第二个下拉列表),但是当它去保存时,它产生了流行的“Can not cast ...”异常(见问题标题)。
通常的原因是你使用了List或Set而不是IList或ISet,但我使用的是ISet,它明确地说它不能转换为ISet。
这是一个集合的原因是因为您不希望主题不止一次成为另一个主题的孩子。 Fluent NH创建的表格映射自动化使用此覆盖是正确的:
mapping.HasMany<Topic>(t => t.ChildTopics).AsSet().Inverse().KeyColumn("TopicId");
答案 0 :(得分:0)
在我的项目中,从NHibernate 3.2.0.400开始,如果我使用System.Collections.Generic.ISet<T>
而不是Iesi.Collections.Generic.ISet<T>
,则仍会出现此错误。简单地改变参考文献是最小的工作并解决问题。