[鐵人賽Day23] ASP.Net Core MVC 進化之路 - Entity Framework Core / Code First From Database

繼上篇提到的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

sql loves linux 2 twitter 002 640x358(圖片來源:https://www.networkworld.com/article/3193052/microsoft-subnet/microsoft-sql-server-on-linux-yes-linux.html)

 

在這個容器化技術當道的世代,

使用Docker建置測試DB也是非常合情合理的事。

它的好處是可以將測試環境「服務化」,

不需要使用時即可關閉,

這樣就不會消耗電腦資源(筆者NB小弱弱),

再加上它比較方便,

所以在測試資料時也是一種選擇。

如果對於這個議題有興趣的建議可以參考Kevin大的文章

 

Azure Sql Database

「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