在錯誤中學習ASP.NET MVC 第 21 篇 - 認識Model - Code First
有沒有人想過,用了MVC4網際網路應用程式範本這麼久了,好像都沒感覺到資料庫的存在,都沒有去設定要連線到哪個資料庫,但還是能正常地註冊以及登入,其實範本是使用LocalDB,LocalDB是微軟新推出的一種資料庫,適合在開發環境上使用,而且下載專案的人也不用再花時間重建或還原資料庫就能看到執行結果。
好,以上跟Code First也沒太大的關係,如果使用Database First一樣可以使用LocalDB,接下來就來看一下預設範本中是使用何種EF(entity framework)的開發方式,其實看文章標題就知道了,是Code First,先觀察專案目錄下的Models資料夾,專案的Models都建議放在這個資料夾下,打開AccountModels.cs
其中的UsersContext去繼承DbContext這個類別,而且還宣告了一個建構子並傳入連線字串,是說連DefaultConnection是在哪邊宣告的呢?在專案下的Web.config中<connectionStrings>裡面
所以看到這邊大概可以知道註冊之後的資料會被放到aspnet-MvcApplication1-20141020165535.mdf這的檔案中,mdf前面的DataDirectory在預設情況下指的就是專案目錄下的App_Data資料夾。
不過在專案剛建立好時App_Data資料夾內是空的,並沒有看到任何檔案,要等網頁執行到AccountController後,mdf檔才會被建立
如果在方案總管下沒有看到檔案清單,記得點一下"顯示所有檔案"的icon
為什麼一定要等到存取AccountController時資料庫才會被建立,當然是因為設定的關係XD
AccountController套用一個名稱為InitializeSimpleMembership的Aaction Filite,Action Filter可以在執行Action之前或之後加入一些行為,可以套用在Controller或Actiont上,之後會再針對Filter做一些補充,其中我們可以看到下圖黃框中,在執行Action之前程式碼會先去判斷資料庫是否存在並建立資料庫。
接下來註冊一下會員,讓資料庫裡面有使用者資料
再來檢查資料庫是否有值,直接點兩下mdf檔案,在伺服器總管下的資料表>UserProfile>顯示資料表
就會看到剛剛新增的資料囉
不過這個資料表與欄位到底是什麼時候被定義的?跟Model有關的東西就到Models資料夾去找,打開AccountModels.cs,就宣告了一個UserProfile的類別,其中的屬性就是資料表的欄位,如果今天想新增欄位,就直接在這邊加一個屬性,但在存在資料庫的情況下要更新欄位就會有比較多的設定。
除了修改屬性之外還要搭配資料庫移轉才能更新資料表,要搭配一些指令來操作
Enable-Migrations
Add-Migration
Update-database -Verbose
因為本身也沒在用Code First,基本上會講比較多Database First的開發方式,所以這篇只是稍微介紹一下,知道有Code First這種開發方式就好了,如果有興趣的人再自己google相關資料吧XD
留言
張貼留言