2011-03-30 77 views
0

考慮2替代線路:OnModelCreating建立級聯的hasMany導致問題刪除

modelBuilder.Entity<CommissionStructure>().HasMany(c => c.CommissionUnits).WithOptional().WillCascadeOnDelete(true); 

    modelBuilder.Entity<CommissionStructure>().HasMany<CommissionUnit>(c=>c.CommissionUnits).WithOptional().WillCascadeOnDelete(true); 

第一行抱怨t目標不能被從使用推斷。

所以我嘗試了第二行,但現在抱怨說無法將IEnumerable轉換爲ICollection,即使我的模型沒有被定義爲ICollection。

任何想法? CommissionUnits是CommissionStructure內嵌套的IEnumerable集合。這是以前的IList,但是IList在使用OrderBy的存儲庫中的LINQ查詢中執行ToList()時存在問題。這就是爲什麼我在我的存儲庫中公開IEnumerable而不是IList。所以我有點卡在一個堅硬的地方搖滾&!

+0

你真的對IList 有什麼問題嗎?我很頻繁地使用IList 作爲導航屬性,直到現在看不到問題。 – Slauma 2011-03-30 16:25:02

+0

我的問題只發生在我的資源庫中時,我需要OrderBy()進行排序。我總是從回購課回來IList,但是嘗試使用OrderBy和IList,你會遇到困難。 myQuery.ToList()不能工作,因爲查詢想要返回一個IOrderedEnumerable。這是我的大問題。 – jaffa 2011-03-30 17:51:47

回答

1

HasManyEntityTypeConfiguration<T>的方法有此簽名:

HasMany<TTarget>(Expression<Func<T, ICollection<TTarget>>> expression) 

這意味着你不能爲導航屬性使用IEnumerable<T>。您需要ICollection<T>或派生的集合類型。這解釋了你的編譯器錯誤。

+0

嗨,這是否意味着當定義我的代碼優先實體模型時,可以使用IList或ICollection定義關係?我有使用IList真正的問題,因爲存儲庫不能將LINQ orderby表達式的結果轉換回IList,我想ICollection也是如此。 – jaffa 2011-03-30 16:26:23

+0

是的,你可以使用'ICollection','IList'甚至具體的類如'Hashset'或'List'或'ObservableCollection'或..或...,所以ICollection或每個從它衍生出來的接口或任何實現ICollection的類。但不是IEnumerable,因爲它太「低級」,它不是從ICollection派生的。你需要展示一個例子,你在使用IList時遇到了什麼問題 - 或許作爲一個新問題更好。 – Slauma 2011-03-30 16:35:17

+0

這是我的新問題:http://stackoverflow.com/questions/5488747/onmodelcreating-setting-up-cascade-delete-with-hasmany-causing-problems 這個問題真的是一個副作用/子問題更廣泛的問題,這是我的鏈接在這裏。 – jaffa 2011-03-30 18:04:57