EF修改實體狀態(State)時出現異常找不到方法“System.Data.Entity.Infrastructure.set_State”

EF修改實體狀態(State)時出現異常找不到方法“System.Data.Entity.Infrastructure.set_State”,具體異常名字記不清楚了(因爲已經解決了 O(∩_∩)O哈哈~)。大致上是在讀取或設置實體狀態時找不到State的get和set方法。
異常出現代碼如下:

var entry = this._context.Entry(entity);
this._context.Set<T>().Attach(entry.Entity);//向上下文附加實體entity;
entry.State=EntityState.Modified;//修改實體狀態。此處發生異常或執行這段代碼前就發生異常“找不到·····set_State方法”

//同樣,我們讀取實體當前的狀態也會發生異常
var state=entry.State;//“找不到·····get_State方法”

我就直接說我的解決辦法了。
我百度網上資料,查了好久查到了一個原因,說是輸出項目與當前操作數據庫的的類庫EF版本不一致··。
我瞬間想到 ,當初建項目的時候確實是這樣的。應爲vs2013建的mvc項目EF自動用的EF6.0,而我操作數據的類庫引用的是EF5.0,當初以爲沒什麼事,關鍵的兩個版本不一致,查詢數據在顯示到頁面上時也沒有問題,所以沒在意。直到我對數據庫有刪除、修改、插入的時候,上面的異常就出現了···
解決:
1.更改EF引用的版本,使其全部一致。包括依賴於EF不同版本的引用。如:EntityFramework.SqlServer等。
2.清理解決方案,去項目bin目錄查看是否還有不要的DLL在裏面,有就刪掉。
3.查看web.config裏面EF的版本是否正確。
4.查看是否有這個配置:

    <!--<providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>-->

刪除或者註釋。這是EF6的東西。
5.重新生成解決方案。
問題到此結束。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章