繼上篇提到的EF Core中的Code First,
本文會介紹Code First From Database的使用方式。
同步發表於個人點部落 - [鐵人賽Day23] ASP.Net Core MVC 進化之路 - Entity Framework Core / 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前請記得先準備一個測試用資料庫,
以下提供筆者常用的三種測試用資料庫供大家參考。
(圖片來源: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物件總管] 中開啟,
如下圖。
(圖片來源:https://www.networkworld.com/article/3193052/microsoft-subnet/microsoft-sql-server-on-linux-yes-linux.html)
在這個容器化技術當道的世代,
使用Docker建置測試DB也是非常合情合理的事。
它的好處是可以將測試環境「服務化」,
不需要使用時即可關閉,
這樣就不會消耗電腦資源(筆者NB小弱弱),
再加上它比較潮方便,
所以在測試資料時也是一種選擇。
如果對於這個議題有興趣的建議可以參考Kevin大的文章。
(圖片來源:https://stackify.com/azure-sql-database-vs-warehouse/)
雖然在地端測試非常方便,
但偶爾在與客戶進行系統展示時,
還是放到雲端會比較方便。
如果你寫的是C#
的Solution,
那Azure
絕對是你整合雲端服務的最佳選擇!
首年度體驗還有250GB的額度可供使用。
而且在網站開發中(ASP.Net Web系列),
使用Azure AppService搭配Sql 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
在下粗淺的認為這個應該不叫做 code first from db
應該算是 db first
正確應該是叫做scaffold