Entityframework Core in action是 Jon P smith
所著的關於Entityframework Core 書籍。原版地址. 是除了官方文檔外另外一個學習EF Core的不錯途徑, 書中由淺入深的講解的EF Core的相關知識。由於沒有中文版,因此本人對其進行翻譯。 預計每兩天一篇更新 PS: 翻譯不免限於本人水平有不許確的地方,建議英文水平不錯的同窗直接查看原版,有不足的地方歡迎指正html
訪問數據庫前咱們須要如下操做:數據庫
本章後面全部的數據庫查詢都是這些步驟,下面我會詳細的描述這些步驟ide
使用EF Core的關鍵類就是應用程序的DbContext,該類繼承EF Core的DbContext類. 添加各類屬性表明數據庫中的表. 它還能夠覆蓋基類方法使用EF Core的其餘功能,好比配置數據庫建模等. 圖2.6展現了應用程序數據庫上下文的概述並指出了重要的部分函數
圖2.6中你並無看到上一節提到的Review實體類和BookAuthor中間類的DbSet
注: 上面沒有介紹到配置數據庫建模,在第六章與第七章中詳細介紹瞭如何對數據庫建模單元測試
在第一章中咱們在OnConfiguring方法中調用了UseSqlServer
方法並硬編碼了鏈接字符串,缺點很明顯鏈接字符串是固定的,因此咱們如今使用另外一種方法. 咱們但願使用不一樣的數據庫用於開發和單元測試.學習
注: 第十五章介紹了對使用EF Core的應用程序進行單元測試測試
下圖展現了建立應用程序數據庫上下文時的選項,圖中的代碼是我在單元測試時使用的. 在第五章中介紹了在ASP.NET Core應用程序中使用EF Core,使用依賴注入的方式爲應用程序提供數據庫上下文的實例網站
圖的最後,使用了using語句包裹了建立數據庫上下文實例的代碼,由於DbContext實現了IDisposable接口. context變量就是咱們須要的數據庫上下文實例編碼
使用EF Core建立數據庫有好幾種方法,大多數都會選擇使用EF Core的遷移. 使用應用程序的數據庫上下文和實體類做爲數據庫結構的模型. Add-Migration
命令進行數據庫建模,而後使用模型構建命令建立對應的數據庫
注: 若是你使用的代碼是從Github倉庫下載的,那麼不須要執行咱們下面要用的遷移命令
遷移的好處是能夠將代碼中所作的任何更改來更新數據庫,若是更改實體類或數據庫上下文配置,使用Add-Migration命令能夠建立最新的遷移文件
使用遷移,咱們須要在應用程序的啓動項安裝Microsoft.EntityFramework.Tools
的NuGet包,它的功能是讓你在包管理控制檯(PMC)使用遷移命令
Add-Migration MyMigrationName
建立遷移命令,它會將全部更改(添加)的實體和等其餘建模配置建立一個遷移文件, MyMigrationName是遷移的名稱Update-Database
應用遷移命令,若是不存在數據庫會數據一個數據庫,若是已存在命令會檢查數據庫的遷移版本並更新到應用程序中的最新版本(也有命令能夠更新到指定版本)注: 還可使用EF Core的CLI運行這些命令 (參見https://docs.microsoft.com/zh-cn/ef/core/miscellaneous/cli/dotnet),第十一章列出了命令的列表. .Net Core2.1引入了全局工具能夠直接運行命令
有另外一種方法調用Update-Database
命令,就是在應用程序的啓動代碼中調用context.Database.Migrate
方法. 這種方法對託管的ASP.NET Core Web應用程序很是有用,第五章詳細介紹了這種方法與其中的一些限制
注: 雖然EF Core的遷移功能很好用,但它並未涵蓋全部類型的數據庫結構更改. 對於某些項目據庫據庫不禁EF Core定義和管理數據庫,這意味着沒法使用EF Core的遷移功能. 第十一章討論了數據庫遷移的選項以及它們的優缺點
通常的應用程序都是分層的,主網站是一個項目,數據訪問層又是一個項目. 這時Add-Migration
命令就要複雜一點
在圖書應用程序中,應用程序的數據庫上下文在名爲DataLayer
的項目中,ASP.NET Core Web程序在名爲EfCoreInAction
的項目中(我會在後面講到爲何這麼分層). 要添加遷移命令以下
Add-Migration Chapter02 -Project DataLayer -StartupProject EfCoreInAction
圖書應用程序的數據庫上下文 EfCoreContext
類沒有無參構造函數,Add-Migration
命令會失敗,要解決這個潛在的問題,咱們須要建立一個IDesignTimeDbContextFactory<T>
接口的實現類,由於Add-Migration
命令會去查找這個接口的實現. 這個實現類建立應用程序的數據庫上下文的正確配置實現,使Add-Migration
命令能夠正常工做. 這也是在圖書應用程序中所作的. 參見 https://docs.microsoft.com/zh-cn/ef/core/miscellaneous/configuring-dbcontext#using-idesigntimedbcontextfactorytcontext