У меня есть объект Тема, представляющая собой собственную иерархию, в которой дочерние темы определены как
public class Topic : Entity {
public ISet<Topic> ChildTopics { get; internal set; }
public Topic ParentTopic { get; set; }
...
}
Я пишу форму (MVC3) для создания раскрывающегося списка (Html.DropDownListFor) тем первого уровня (теоретически это в конечном итоге превратит AJAX во второй раскрывающийся список тем второго уровня), но когда происходит сохранение, создается все более популярное исключение «Cannot cast ...» (см. заголовок вопроса).
Обычная причина этого заключается в том, что вы использовали List или Set вместо IList или ISet, но я использую ISet, и в нем конкретно говорится, что он не может быть приведен к ISet.
Причина, по которой этот набор - в том, что вы не хотите, чтобы Тема была дочерней по отношению к другой Теме более одного раза. Отображение таблицы, созданное Fluent NH automapping , корректно с этим переопределением:
mapping.HasMany<Topic>(t => t.ChildTopics).AsSet().Inverse().KeyColumn("TopicId");