2011-05-24 57 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>這個錯誤仍然出現。只需簡單地更改參考文獻即可完成最少的工作並解決問題。