iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 9
4
Modern Web

跨平台開發利器- ASP.NET Core 系列 第 9

(Day 9) 如何進行Database First式開發?

  Database First就是先在資料庫把資料庫結構設計完成,再到ASP.NET Core裏,建立資料庫連線,然後使用Entity Framework來完成Model的建立。  
  昨天,我們做了三個Table的結構設計,在SQL Server的SSMS裏,利用新增資料表把這三個資料表建好。要注意設置Id欄位為Primary Key。
https://ithelp.ithome.com.tw/upload/images/20181014/2001764918h1lAQpwB.png
  建好資料表SSMS如下圖。
https://ithelp.ithome.com.tw/upload/images/20181014/20017649lADm18XMjr.png
  回到ASP.NET Core的環境,先建一個資料庫連線,如下圖在[伺服器總管]的[資料連接]選[加入連接...]
https://ithelp.ithome.com.tw/upload/images/20181014/20017649jbJxO5H8YL.png
  然後在[選擇資料來源]視窗選擇Microsoft SQL Server,可別選了Microsoft SQL Serevr資料庫檔案,這是兩碼子事。
https://ithelp.ithome.com.tw/upload/images/20181014/20017649OXTonWBF7G.png
  按下[繼續]就出現[加入連接]的視窗,在這裏輸入要連結的資料庫伺服名稱和選擇資料庫名稱,我們就把剛才建好的資料庫拿來用。
https://ithelp.ithome.com.tw/upload/images/20181014/20017649ekcVxFpPIc.png
  要注意的是驗證是選擇Windwos驗證,這也是所謂整合式驗證的一部份,我們點開驗證的下拉選單還可以看到其他三種不同驗證方式:
https://ithelp.ithome.com.tw/upload/images/20181014/20017649LjOWb8lKYJ.png

  • SQL Server驗證,這個我以前常見都是把sa拿來用,這真是怎麼死都不知道的做法。
  • Active Directory密碼驗證,意思是要輸入Active Directory的密碼。
  • Active Directory整合式驗證,如果進入網站時就已經驗證過Active Directory,就直接引用相同的驗證資訊來進行登入了。
      如果沒有使用Active Directory,使用Windows驗證也就可以了。只是要注意,這裏的Windows驗證帳號是指SQL Server所在Windows伺服器上的帳號。
      因為現在SQL Server和Visual Studio都在同一台電腦上,也就直接用Windows驗證就行了,不用想太多,部署時,只要把環境整理一下就行了。
      接下來,我們點一下[測試連線]來驗證資料庫連線正常。
    https://ithelp.ithome.com.tw/upload/images/20181014/20017649qzJ6Uw5L5U.png
      最後,我們看一下[進階屬性],比較重要的是下面的連線字串,下圖紅框內的字串,這就是ConnectionString,在ASP.NET裏是資料庫處理的重要參數值。
    https://ithelp.ithome.com.tw/upload/images/20181014/20017649tqyu0oJJVM.png
      接下來,我們到Visual Studio,把打開HRApp專案。再到[工具]功能表下,選擇[NuGet套件管理員]下的[套件管理器主控台]功能。
    https://ithelp.ithome.com.tw/upload/images/20181014/20017649pEu9zHOqwZ.png
      於是在Visual Studio裏跳出新的[套件管理器主控台]視窗。
    https://ithelp.ithome.com.tw/upload/images/20181014/20017649JICGZ55WyK.png
      在[套件管理器主控台]中輸入以下命令:
    Scaffold-DbContext "DBConnectionString" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
      DBConnectionString可以從下面的指示方式取得:
    打開[伺服器總管],在[資料連接]中找出剛才建好的連接點上按滑鼠右鍵叫出快選單,如下圖:
    https://ithelp.ithome.com.tw/upload/images/20181014/20017649fHgfGZ8lTp.png
    在快選單中點選[屬性],在Visual Studio的右邊出現[屬性]視窗,在[連接字串]中可以看到ConnectionString的值,如下:
    https://ithelp.ithome.com.tw/upload/images/20181014/20017649YEy1hg9Q3L.png
    Data Source=SMNVM;Initial Catalog=HRDB;Integrated Security=True
    複製替換掉命令中雙引號裏的DBConnectionString,即成為如下完整指今令;
    Scaffold-DbContext "Data Source=SMNVM;Initial Catalog=HRDB;Integrated Security=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
    按下[Enter]執行這個指令。完成會出現如下圖:
    https://ithelp.ithome.com.tw/upload/images/20181014/20017649HUsGXZsKkX.png
    有個要升級的警告訊息,說是有新版EF Core Tools,先不管它。同時我們可以看到方案總管裏,Model資料夾下多出幾個類別檔案,正好對應我們在SSMS裏建的三個新的資料表。
    https://ithelp.ithome.com.tw/upload/images/20181014/20017649F4TjQ2glPy.png
    還有一個HEDBContext.cs的資料庫Schema類別檔案,以前在ASP.NET MVC時,這是edmx檔案,但到了ASP.NET Core,就只留下了類別檔,沒有提供edmx檔案。這是因為edmx檔案配合了一個資料庫關聯的圖型管理工具,大概長得像這個樣子。
    https://ithelp.ithome.com.tw/upload/images/20181014/200176493Rok1eckm1.png
      這不就像是SSMS的資枓庫圖表工具嗎?上圖是用Google查找出來的圖案,如有不當之處,請通知,我會刪圖。
      建立關聯圖表,還是到SQL Server環境下運用專門的SSMS工具來製作吧!
      談到這裏,Database First也就談的差不多了,接下來是如何利用Model來製作View,以及如果在資料庫修改了資料庫物件時,如何讓ASP.NET Core的專案的Model保持同步,這只能透過主控台工具來進行同步。
      今天就介紹到這裏,明天再續。

上一篇
(Day 8) 從瞭解需求到資料庫規劃的傳統軟體專案開發方式有什麼不好的地方嗎?
下一篇
(Day 10) 從Model來建一個完整的Controller及對應的View檔案
系列文
跨平台開發利器- ASP.NET Core 30
0
海綿寶寶
iT邦大神 1 級 ‧ 2018-10-14 19:01:17

純推不下
/images/emoticon/emoticon43.gif

0
towny
iT邦新手 5 級 ‧ 2018-10-15 23:53:54

請問,當主索引的一定是要ID(int)嗎 , 我 建立了資料表 stno(char 2) , vouchno(char 10)當主索引 , 使用 EF savechange , 它說主索引欄位不能修改=>.....是此物件之索引鍵資訊的一部分,而且無法修改 ..... 為什麼 , 剛學 mvc 的我 , 謝謝

賽門 iT邦超人 1 級 ‧ 2018-10-16 16:25:15 檢舉

這是ASP.NET Core的系統遊戲規則,Id是用來辨識記錄的惟一主鍵。

towny iT邦新手 5 級 ‧ 2018-11-04 22:55:23 檢舉

Thanks

0
towny
iT邦新手 5 級 ‧ 2019-11-24 11:51:51

請問賽門 , 我若只要其中一個Table , 不要全部的話 , 要怎麼下指令 , 謝謝 .

1
PPTaiwan
iT邦新手 4 級 ‧ 2020-08-10 13:01:05

雖然這篇很久了, EF 拿來運用與資料庫 CRUD 根本就是懶人才會去寫,都是為了一個小小的需求拿「殺雞焉用牛刀」卻使得專案與資料庫累積了大量雜物,最後又要重構程式碼與資料庫。

想用資料應用還是多學一下正統資料庫相關觀念與設計,各其所需每一個 "技術" 都有好有壞,但最基本的各其所需會是重點。

寫資料庫應用就很難 Debug 了嗎?? 如果了解更多技術的應用與學習,才是真的學習到與了解到,不要每一個都學結果什麼都不精。很難...那你就別幹程式設計這條路了,根本就不適合你...

我要留言

立即登入留言