當我調試以下代碼時,當執行Delete()
時,收到消息「System.TypeLoadException
被捕獲」。無法加載類型'System.Data.Entity.Core.Mapping.EntityContainerMapping'
Using db As New ScholarshipEntities
db.ApplicationHistories.Where(Function(h) h.HistoryTypeId = 0).Delete()
db.SaveChanges()
End Using
我在Visual Studio 2013中使用EF 6.1。我還安裝了EntityFramework.Extended庫。
我沒有問題查詢結果。我認爲當Where
方法沒有結果時可能會發生該錯誤,但事實並非如此。添加新模型(.edmx)也沒有問題,這是一些有此例外情況的人遇到的問題。
我剛剛升級到EF 6.1並安裝了擴展庫。這是我第一次使用其中一種擴展方法。我已經卸載並重新安裝了nuget包,但沒有成功。
的IntelliTrace顯示從Delete()
調用(按順序)下列情況除外:
'EntityFramework.Reflection.DynamicProxy' does not contain a definition for 'InternalQuery'
Cannot implicitly convert type 'EntityFramework.Reflection.DynamicProxy' to 'System.Data.Entity.Core.Objects.ObjectQuery<Scholarship.ApplicationHistory>'
Could not load type 'System.Data.Entity.Core.Mapping.EntityContainerMapping'
我已經added an issue的擴展庫的github上。
更新 我已經重新安裝EF和EF.Extended庫沒有運氣。我可以使用RemoveRange
代替它。我能夠創建一個新項目,安裝軟件包,添加映射到同一數據庫的模型,併成功使用Delete
。顯然,問題出在我目前的解決方案中。
在我的解決方案中,我有一個ASP.NET項目和一個常規庫項目。在ASP項目中,後面的代碼調用庫RemoveHistory
中的方法。該庫包含業務邏輯和數據訪問的類。這兩個類都實現接口。實際的Delete
發生在數據訪問類中。我的模型也駐留在這個庫項目中。
我可能會創建一個全新的項目並將所有內容都帶過來,但這需要相當長的一段時間。即使我做了,我想了解爲什麼它不能在第一個地方工作,這樣我就不必重複這個過程。
從未使用過它,並且不確定這是否相關,但是基於[文檔](https://github.com/loresoft/EntityFramework.Extended)爲'EntityFramework.Extended',不應該刪除' db.ApplicationHistories.Delete(Function(h)h.HistoryTypeId = 0)'?我猜想'db.SaveChanges()'調用也是不必要的,如果它沒有將實體帶入上下文而被刪除。 – Mark
您可能對'db.SaveChanges()'是正確的(直到'Delete'工作後我纔會知道)。在重構API後,您寫入的刪除方法已過時。目前的文檔說使用'query.Where(expression).Delete()'語法代替。也就是說,使用過時的語法會拋出相同的異常。不過謝謝你的評論! – Zairja