繼上篇提到的EF Core中的Code First,
本文會介紹Code First From Database的使用方式。
Code First From Database顧名思義就是「來自DB的Code First」。
為什麼會提到這個主題呢?
因為在開發的過程中,
我們比較常遇到的狀況都是「先有DB再寫AP」,
再加上純粹手工的Code First門檻較高,
當資料表複雜度變高時維護相對不易。
在過去EF6時有Model First,
可以幫助我們快速構建出.edmx的檔案,
而這個方式卻在EF Core中被移除了。
使用Code First From Database前請記得先準備一個測試用資料庫,
以下提供筆者常用的三種測試用資料庫供大家參考。
localdb
(圖片來源:https://blog.sqlauthority.com/2009/08/26/sql-server-sql-server-express-a-complete-reference-guide/)
安裝Visual Studio 2017後會很佛心的內建一個SQL Express的localdb,
這對於開發人員在資料庫測試時非常方便。
你可以從[Visual Studio 2017] > [檢視] > [SQL Server物件總管] 中開啟,
如下圖。
Docker + SQL Server on Linux
在這個容器化技術當道的世代,
使用Docker建置測試DB也是非常合情合理的事。
它的好處是可以將測試環境「服務化」,
不需要使用時即可關閉,
這樣就不會消耗電腦資源(筆者NB小弱弱),
再加上它比較潮方便,
所以在測試資料時也是一種選擇。
如果對於這個議題有興趣的建議可以參考Kevin大的文章。
Azure Sql Database
(圖片來源:https://stackify.com/azure-sql-database-vs-warehouse/)
雖然在地端測試非常方便,
但偶爾在與客戶進行系統展示時,
還是放到雲端會比較方便。
如果你寫的是C#的Solution,
那Azure絕對是你整合雲端服務的最佳選擇!
首年度體驗還有250GB的額度可供使用。
而且在網站開發中(ASP.Net Web系列),
使用Azure AppService搭配Sql Database真的很方便,
筆者個人的心得是:用過就回不去了。
Code First From Database
以下筆者會使用localdb進行測試,
首先請開啟Visual Studio建立一個ASP.Net Core範本專案,
第一步請先使用Nuget安裝Microsoft.EntityFrameworkCore.SqlServer
,
好了之後我們要查看一下localdb的查詢字串。
接著開啟套件管理器主控台(Package Manager Console),
將下列指令貼上。
Scaffold-DbContext "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Northwind;
Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;
ApplicationIntent=ReadWrite;MultiSubnetFailover=False"
Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models\DB
其中雙引號裡面放的就是剛才那串連接字串,
最後一行前面的Microsoft.EntityFrameworkCore.SqlServer
是在指定Data Provider,
如果是Oracle或Mysql的資料庫就要使用不同的Provider建立,
-OutputDir Models\DB
可設定輸出的相對路徑,
好了之後按下Enter送出。
測試結果。
這樣就大功告成了!
除了資料表的Model以外,
連DbContext(NorwthwindDbContext)都建好了,
跟.edmx相比速度真的是有差XD。
Entity Framework Core系列就介紹到此,
如有錯誤再麻煩幫忙指正!
參考
https://docs.microsoft.com/zh-tw/ef/core/get-started/aspnetcore/existing-db