iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 23
1
Modern Web

菜鳥練等區-ASP.Net Core MVC進化之路系列 第 23

[鐵人賽Day23] - Entity Framework Core / Code First From Database

前言

繼上篇提到的EF Core中的Code First
本文會介紹Code First From Database的使用方式。

同步發表於個人點部落 - [鐵人賽Day23] ASP.Net Core MVC 進化之路 - Entity Framework Core / Code First From Database

Database Preparing

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


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

在這個容器化技術當道的世代,
使用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
如果是OracleMysql的資料庫就要使用不同的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


上一篇
[鐵人賽Day22] - Entity Framework Core / Code first
下一篇
[鐵人賽Day24] - MemoryCache
系列文
菜鳥練等區-ASP.Net Core MVC進化之路30

1 則留言

0
900pro
iT邦新手 4 級 ‧ 2019-04-30 17:20:18

在下粗淺的認為這個應該不叫做 code first from db

應該算是 db first

正確應該是叫做scaffold

我要留言

立即登入留言