EF Core 快速上手——EF Core的三種主要關係類型github
爲了建立數據庫,你須要執行操做:web
您將在本章後面看到的全部數據庫查詢都使用這些步驟,
我如今開始詳細介紹。數據庫
使用 ef core 所需的關鍵類是應用程序的 dbcontext。這個類繼承自EF Core的 DbContext,並經過添加各類屬性讓您的軟件可以訪問數據庫表。它也包含了一些你能夠重寫的方法來訪問EF Core 的其餘屬性。好比,配置數據庫建模等等。架構
圖2.6給出了應用的DbContext概覽,並指出了全部重要的部分。函數
圖2.6中,值得注意的一點是,應用的DbContext沒有包含Review實體和BookAuthor實體的DbSet
NOTE:我先跳過配置數據庫建模,這個能夠經過在應用的DbContext的OnModel-Creating 方法中實現。第6和7章會涉及到數據庫建模的細節。單元測試
第1章向你展現了經過重寫OnConfiguring方法建立應用的DbContext。那種方式的缺點是數據庫鏈接串是固定的。本章你將使用另外一種方法,由於我想在開發和單元測試階段是使用不一樣的數據庫。你將使用一種方法,這種方法經過應用的DbContext構造函數提供數據庫鏈接字符串。測試
NOTE:第15章將涉及到EF Core應用程序的單元測試。命令行
清單2.2提供了建立應用程序的dbcontext(稱爲efcorecontext)時數據庫的Options(DbContextOptions)。老實說,這個清單基於個人單元測試,由於他有益於向你展現組件的各個部分。第5章,將在ASP.NET Core應用中使用EF Core,經過依賴注入的反射方式構建應用的DbContext。
在清單的末尾,你在using語句內部建立了一個EfCoreContext的實例。爲何要用using語句呢?由於DbContext有一個IDisposable接口,因此你在使用完成以後,必須釋放。從如今起,你看到的context變量,基本上使用了清單2.2的方式或者類似的方式建立的。
使用EF Core建立數據庫有幾種方式,可是一般使用EF Core的migrations特性。這將使用應用程序的 dbcontext 和實體類,就像我剛纔描述的那樣, 做爲數據庫結構的模型。Add-Migration命令首先對數據庫建模,而後使用該模型,生成命令以建立適合該模型的數據庫。
除了建立數據庫,migrations 命令的偉大之處在於,它們能夠更新數據庫根據你的實體模型變化。若是你更改了實體模型或者應用DbContext的配置,Add- Migration會構建一系列命令來更新現有的數據庫。
爲了使用migration特性,你須要在你的啓動項目安裝Microsoft.EntityFrameworkCore.Tools包,能夠在NuGet管理器中搜索。這將使你可以在Visual Studio Package Manager Console (PMC)中時使用Migrate命令。
這是你須要的:
Add-Migration MyMigrationName —這會建立一系列命令來對數據庫進行遷移,從當前狀態到與你的應用DbContext和實體模型相匹配的狀態。命令中的MyMigrationName是你將要遷移到的名字。
Update-Database —這個命令會把 Add-Migration構建的命令應用到你的數據庫。若是數據庫不存在,Update-Database 命令 將會執行建立。若是數據庫已經存在,Update-Database 命令將會檢測是否執行過數據庫遷移。若是有數據庫遷移丟失,Update-Database命令會執行遷移。
NOTE 你也可使用EF Core的命令行界面(CLI)來執行這些命令(http://mng.bz/454w)。第11章將會列出兩種命令VS 2017 和 CLI兩種版本的命令。此外,. net 2.1 還將引入全局工具,這將容許您經過正常命令調用這些命令行函數。
替代使用Update-Database命令的方式是在你應用的startup代碼中調用context.Database.Migrate方法。這種方法對於承載的 asp. net core web 應用程序很是有用;第5章將包含這個選項,包括它的一些限制。
NOTE 你也可使用EF Core的命令行界面(CLI)來執行這些命令(http://mng.bz/454w)。第11章將會列出兩種命令VS 2017 和 CLI兩種版本的命令。此外,. net 2.1 還將引入全局工具,這將容許您經過正常命令調用這些命令行函數。
儘管 ef core的遷移功能頗有用, 但它並不涵蓋數據庫結構更改的全部類型。此外,對於某些項目,數據庫將在 ef core 以外定義和管理,這就意味着你不能使用EF Core的migrate特性。第11章探討了可用於數據庫遷移的選項,以及他們的利弊。
若是你的應用的DbContext的項目和你的啓動項目是獨立的(如本書的項目架構),Add-Migration命令稍微有一點複雜。
在圖書APP中,應用的DbContext在DataLayer項目中,而ASP.NET Core應用在EfCoreInAction項目中(本章稍後會解釋爲何這樣設計)。若要添加EF Core 遷移,Add-Migration 命令以下:
Add-Migration Chapter02 -Project DataLayer -StartupProject
您還須要爲遷移提供一種方法來建立一個應用的DbContext的實例。圖書APP的DbContext(EfCoreContext),有一個無參構造函數,因此Add-Migration命令會失敗。爲了解決這個潛在的問題,Add-Migration會查找一個實現了IDesignTimeDbContextFactory
參考