- 實體框架教程
- 實體框架 - 首頁
- 實體框架 - 概述
- 實體框架 - 架構
- 實體框架 - 環境設定
- 實體框架 - 資料庫設定
- 實體框架 - 資料模型
- 實體框架 - DbContext
- 實體框架 - 型別
- 實體框架 - 關係
- 實體框架 - 生命週期
- 實體框架 - 程式碼優先方法
- 實體框架 - 模型優先方法
- 實體框架 - 資料庫優先方法
- 實體框架 - 開發方法
- 實體框架 - 資料庫操作
- 實體框架 - 併發
- 實體框架 - 事務
- 實體框架 - 檢視
- 實體框架 - 索引
- 實體框架 - 儲存過程
- 實體框架 - 離線實體
- 實體框架 - 表值函式
- 實體框架 - 原生SQL
- 實體框架 - 列舉支援
- 實體框架 - 非同步查詢
- 實體框架 - 持久化
- 實體框架 - 投影查詢
- 實體框架 - 命令日誌
- 實體框架 - 命令攔截
- 實體框架 - 空間資料型別
- 實體框架 - 繼承
- 實體框架 - 遷移
- 實體框架 - 渴望載入
- 實體框架 - 延遲載入
- 實體框架 - 顯式載入
- 實體框架 - 驗證
- 實體框架 - 跟蹤更改
- 實體框架 - 彩色實體
- 實體框架 - 程式碼優先方法
- 實體框架 - 第一個示例
- 實體框架 - 資料註釋
- 實體框架 - Fluent API
- 實體框架 - 初始化資料庫
- 實體框架 - 程式碼優先遷移
- 實體框架 - 多個DbContext
- 實體框架 - 巢狀實體型別
- 實體框架資源
- 實體框架 - 快速指南
- 實體框架 - 有用資源
- 實體框架 - 討論
實體框架 - 遷移
在實體框架5和之前的實體框架版本中,程式碼分為核心庫(主要是System.Data.Entity.dll),作為.NET框架的一部分發布,以及附加庫(主要是EntityFramework.dll),使用NuGet分發和釋出,如下圖所示。
在實體框架6中,以前是.NET框架一部分的核心API也作為NuGet包的一部分分發。
這是為了允許實體框架開源。但是,結果是,每當需要將應用程式從舊版本的實體框架遷移或升級到EF 6時,都需要重新構建應用程式。
如果您的應用程式使用DbContext(在EF 4.1及更高版本中釋出),則遷移過程很簡單。但如果您的應用程式是ObjectContext,則需要更多工作。
讓我們來看一下將現有應用程序升級到EF6需要執行的步驟。
步驟1 - 第一步是將目標設定為.NET Framework 4.5.2及更高版本,右鍵單擊您的專案並選擇屬性。
步驟2 - 再次右鍵單擊您的專案並選擇“管理NuGet程式包...”
步驟3 - 在“聯機”選項卡下選擇EntityFramework並單擊“安裝”。確保已刪除對System.Data.Entity.dll的程式集引用。
安裝EF6 NuGet包時,它應該會自動為您刪除專案中對System.Data.Entity的任何引用。
步驟4 - 如果您有任何使用EF設計器建立的模型,則還需要更新程式碼生成模板以生成與EF6相容的程式碼。
步驟5 - 在解決方案資源管理器中,在您的edmx檔案下,刪除現有的程式碼生成模板,這些模板通常命名為<edmx_file_name>.tt和<edmx_file_name>.Context.tt。
步驟6 - 在EF設計器中開啟您的模型,右鍵單擊設計圖面,然後選擇“新增程式碼生成項...”
步驟7 - 新增相應的EF 6.x程式碼生成模板。
它也將自動生成與EF6相容的程式碼。
如果您的應用程式使用EF 4.1或更高版本,則無需更改程式碼中的任何內容,因為DbContext和Code First型別的名稱空間沒有更改。
但如果您的應用程式使用的是舊版本的實體框架,則以前在System.Data.Entity.dll中的ObjectContext等型別已移動到新的名稱空間。
步驟8 - 您需要更新您的using或Import指令以針對EF6構建。
名稱空間更改的一般規則是,System.Data.*中的任何型別都移動到System.Data.Entity.Core.*。以下是一些示例:
- System.Data.EntityException ⇒ System.Data.Entity.Core.EntityException
- System.Data.Objects.ObjectContext ⇒ System.Data.Entity.Core.Objects.ObjectContext;
- System.Data.Objects.DataClasses.RelationshipManager ⇒ System.Data.Entity.Core.Objects.DataClasses.RelationshipManager;
某些型別位於Core名稱空間中,因為對於大多數基於DbContext的應用程式而言,它們不會直接使用。
- System.Data.EntityState ⇒ System.Data.Entity.EntityState
- System.Data.Objects.DataClasses.EdmFunctionAttribute ⇒ System.Data.Entity.DbFunctionAttribute
您的現有實體框架專案無需任何重大更改即可在實體框架6.0中執行。