4.2 關於實體資料庫

ASP.NET MVC 實務精要|第四章 串接關聯式資料庫 - SQL Server

在學習或是初期開發階段,通常並不需要將系統與資料庫佈署到伺服器,如同 2.1 Model 與資料庫 中示範的,Visual Studio 為了減化開發人員的困擾,運用 Entit Framework 開發的 ASP.NET MVC 網頁在第一次執行的過程中,會自動建立需要的資料庫,至於資料庫的位置以下作說明。


開啟上一節建立的專案,專案清單下有一個App_Data資料節點,Entity Framework 建立的資料庫會存放在這個節點對應的資料夾裹面,按一下開啟「在檔案總管中開啟資料夾」,開啟儲存資料庫檔案的實體資料夾。


在這個資料夾中,儲存兩個與資料庫有關的檔案,其中副檔名.mdf者為主要的檔案,請特別注意其名稱,由於沒有任何預先的設定,因此資料庫的名稱是專案名稱連接所屬模型資料夾名稱最後再串接定義繼承DbContext的KTStore類別名稱,如下:

DBModelDemo.Models.KTStore.mdf

現在我們要利用Visual Studio 內建的資料庫連接工具開啟這個資料庫檔案,檢視其中的資料表結構與內容。


展開工具功能表,點擊其中的「連接到資料庫」選項開啟「加入連接」對話方塊。


由於要連接的獨立的資料庫檔案,因此按一下右上角的「變更」按鈕,開啟「變更資料來源」對話方塊。


於其中選取「Microsoft SQL Server資料庫檔案」將其反白,然後按一下「確定」按鈕,回到原來的「加入連接」對話方塊。


按一下「瀏覽」 按鈕,找到App_Data中的資料庫將其路徑設定給資料庫檔名欄位,完成設定後,按一下「測試連接」以瞭解設定是否正常,如果正常就表示設定完成,或許你會看到以下的錯誤畫面:


出現以上的錯誤畫訊息畫面表示你使用的Visual Studio 資料庫連線設定版本與目前Entity Framework的預設版本不符,先將其關閉,回到功能表點選「工具」其展開如下:


點擊下方的「選項」,開啟設定對話方塊。


找到左邊選單中最下方的「資料庫工具」項目將其展開,下方有一個「資料連接」項目,點擊之後切換至右邊的連接選項畫面,你會看到其中的「SQL Server 執行個體名稱」欄位內容為 (LocalDB)\v11.0,修正這個值為 (LocalDB)\MSSQLLocalDB 。


完成修正之後,設定畫面中的「SQL Server 執行個體名稱」欄位內容應該如圖所示,現在按一下「確定」按鈕,回到原來的畫面即可。SQL Server 是一個持續升級擴充的資料庫系統,多年發展下來已衍生各種不同的版本,每一個版本均有其對應的執行個體名稱,下表列舉這裏兩個實體名稱對應的版本:

資料庫名稱
執行個體名稱
SQL Server 2014 LocalDB
(localdb)\MSSQLLocalDB
SQL Server 2012 LocalDB
(localdb)\v11.0

最新版Visual Studio Express 搭配的Entity Framework建立的資料庫檔案是SQL Server 2014 LocalDB ,因此必須調整其對應的執行個體名稱。

完成設定回到「加入連接」對話方塊中,按一下「測試連接」按鈕,會看到測試連接成功的訊息方塊,按下「確定」按鈕關閉對話方塊,再按下「加入連接」畫面下方的「確定」按鈕,開啟伺服器總管。


展開畫面中的「資料連接」,開啟其中的KTStore.mdf資料庫節點,展開此專案建立的資料庫結構,其中資料表節點下方的Products 資料表對應至Product類別定義的欄位項目。


於Products按一下滑鼠右鍵,點擊 「開啟資料表定義」項目以檢視Visual Studio 自動為我們建立的資料表結構。


由於第一次建立Product類別,為了簡化說明,Product類別並沒有特別指定各種屬性,因此各欄位的資料型別會依據預設條件自行建立,後續針對這一部份會有進一步的說明,這裏必須提醒讀者的是,名稱為ID的欄位,會自動建立為int型別,並且為自動遞增產生的數字,如果你建立的是一個字串(String)型態的屬性,這裏對應的欄位將會允許Null值,如果是數值或日期時間,則不允許Null。


再次於Products按一下滑鼠右鍵,點擊 「開啟資料表定義」項目以展開資料表內容,目前並沒有任何資料。


除了ID之外,逐一於各欄位輸入一筆資料值,完成之後在第二列按一下,此時資料會被輸入至資料表中,ID欄位會自動產生第一筆資料編號。現在重新瀏覽網頁,網頁上所顯示的數字,已經從原來的0變成1,表示Products資料表中有一筆資料。具備足夠的知識,接下來我們要在這個基礎上逐步建立包含新增、讀取、修改與刪除等資料處理功能。

沒有留言: