在本節中,您將使用Entity Framework Code First來實現模型類上的操做。從而使得這些操做和變動,能夠應用到數據庫中。html
默認狀況下,就像您在以前的教程中所做的那樣,使用 Entity Framework Code First自動建立一個數據庫,Code First爲數據庫所添加的表,將幫助您跟蹤數據庫是否和從它生成的模型類是同步的。若是他們不是同步的,Entity Framework將拋出一個錯誤。這很是方便的在開發時就能夠發現錯誤,不然您可能會在運行時才發現這個問題。 (由一個晦澀的錯誤信息,才發現這個問題。)數據庫
若是您使用的是 Visual Studio 2012,從解決方案資源管理器中雙擊Movies.mdf,打開數據庫工具。Visual Studio Express for Web將顯示數據庫資源管理器,Visual Studio 2012 將顯示服務器資源管理器。若是您使用的是Visual Studio 2010,請使用 SQL Server對象資源管理器。瀏覽器
在數據庫工具 (數據庫資源管理器、 服務器資源管理器或 SQL Server對象資源管理器),右鍵單擊MovieDBContext
,並選擇刪除以刪除電影數據庫。服務器
返回到解決方案資源管理器。在Movies.mdf文件上右鍵單擊,並選擇刪除以刪除電影數據庫。mvc
Build應用程序,以確保沒有任何編譯錯誤。asp.net
從工具菜單上,單擊庫包管理器,而後點擊程序包管理器控制檯.工具
在 軟件包管理器控制檯 窗口中PM> 提示符下輸入"Enable-Migrations �ContextTypeName MvcMovie.Models.MovieDBContext"。學習
(如上所示)Enable-Migrations命令會在Migrations文件夾中建立一個Configuration.cs文件。開發工具
在Visual Studio 中打開Configuration.cs文件。把Configuration.cs文件中的Seed方法,替換爲下面的代碼:測試
在Movie下面出現的紅色波浪線上右鍵單擊,並選擇Resolve而後點擊usingMvcMovie.Models;
這樣作以後,將添加如下的 using語句:
每次Code First Migrations 會調用Seed 方法(即,在程序包管理器控制檯中調用update-database),而且這次調用會更新行:更新已經插入的行,或把不存在的行也插入。
按 CTRL-SHIFT-B 來Build工程。(若是這次Build不成功,如下的步驟將會失敗。)
下一步是建立一個DbMigration
類,用於初始化數據庫遷移。此遷移類將建立新的數據庫,這也就是爲何在以前的步驟中你要刪除movie.mdf
文件。
在軟件包管理器控制檯窗口中,輸入"add-migration Initial"命令來建立初始遷移。" Initial" 的名稱是任意,是用於建立遷移文件的名稱。
Code First Migrations將會在Migrations文件夾中建立另外一個類文件 (文件名爲: {DateStamp}_Initial.cs ),此類中包含的代碼將建立數據庫的Schema。遷移文件名使用時間戳做爲前綴,以幫助用來排序和查找。查看{DateStamp}_Initial.cs文件,它包含了爲電影數據庫建立電影表的說明。當您更新數據庫時,{DateStamp}_Initial.cs文件將會被運行並建立 DB 的Schema。而後Seed方法將運行,用來填充 DB 的測試數據。
在軟件包管理器控制檯中,輸入命令" update-database ",建立數據庫並運行Seed方法。
若是您收到表已經存在而且沒法建立的錯誤,多是由於您已經刪除了數據庫,而且在執行update-database
以前,您運行了應用程序。在這種狀況下,再次刪除Movies.mdf文件,而後重試update-database
命令。若是您仍遇到錯誤,刪除Migration文件夾及其內容,而後從頭開始重作。(即刪除Movies.mdf文件,而後再進行Enable-Migrations)
運行該應用程序,而後瀏覽URL /Movies Seed數據顯示以下:
給現有的Movie
類,添加新的Rating
屬性。打開Models\Movie.cs文件並添加以下Rating
屬性:
public string Rating { get; set; }
完整的Movie
類以下:
Build 應用程序 Build>Build Move或CTRL-SHIFT-B.
如今,您已經更新了Model
類,您還須要更新\Views\Movies\Index.cshtml和\Views\Movies\Create.cshtml視圖模板,以便能在瀏覽器中顯示新的Rating
屬性。
打開\Views\Movies\Index.cshtml文件,在Price列後面添加<th>Rating</th>
的列頭。而後添加一個<td>
列來顯示@item.Rating
的值。下面是更新的Index.cshtml視圖模板:
下一步,打開\Views\Movies\Create.cshtml文件,並在form標籤結束處的附近添加以下代碼。您能夠在建立新的電影時指定一個電影等級。
如今,您已經更新應用程序代碼以支持了新的Rating
屬性。
如今運行該應用程序,而後瀏覽 /Movies的 URL。然而,當您這樣作時,您將看到如下之一的錯誤信息:
你如今看到此錯誤,由於在應用程序中,最新的Movie
模型類和現有的數據庫Movie
表的Schema不一樣。(數據庫表中,沒有Rating
列。)
咱們將使用Code First Migrations 來解決這一問題。
更新Seed方法,以便它能爲新的列提供一個值。打開 Migrations\Configuration.cs 文件,並將Rating 字段添加到影片的每一個對象。
new Movie { Title = "When Harry Met Sally", ReleaseDate = DateTime.Parse("1989-1-11"), Genre = "Romantic Comedy", Rating = "G", Price = 7.99M },
Build解決方案,而後打開 軟件包管理器控制檯 窗口,並輸入如下命令:
add-migration AddRatingMig
add-migration
命令告訴migration framework,來檢查當前電影模型與當前的影片 DB Schema並建立必要的代碼以將數據庫遷移到新的模型。AddRatingMig 是一個任意的文件名參數,用於命名migration文件。它將有助於使得遷移步驟成爲一個有意義的名字。
當命令完成後,用Visual Studio 打開類文件,新繼承自DbMIgration
類的定義,並在Up
方法中,您能夠看到建立新列的代碼:
Build解決方案,而後在 程序包管理器控制檯 窗口中輸入"update-database"命令。
下面的圖片顯示了 程序包管理器控制檯 窗口的輸出 (AddRatingMig 的前綴時間戳將有所不一樣)。
從新運行應用程序,而後瀏覽 /Movies 的 URL。您能夠看到新的評級字段。
單擊CreateNew連接來添加一部新電影。注意,請您能夠爲電影添加評級。
單擊Create。新的電影,包括評級,將顯示在電影列表中:
此外您也應該把Rating
字段添加到編輯、 詳細信息和 SearchIndex 的視圖模板中。
您能夠再次在 程序包管理器控制檯 窗口中輸入"update-database"命令,將不會有任何新的變化,由於數據庫Schema 和模型類如今是匹配的。
在本節中,您看到了如何修改模型對象並始終保持其和數據庫Schema的同步。您還學習了使用填充示例數據來建立新數據庫的例子,您能夠反覆嘗試。接下來,讓咱們看看如何將豐富的驗證邏輯添加到模型類,並對模型類執行一些強制的業務規則驗證。相信有了本節如何修改模型對象並始終保持其和數據庫Schema同步的內容介紹,你們會對MVC的理解又加深一步。後面若是要進行ASP.ET MVC的開發,在具有MVC的知識的同時,還能夠藉助一些開發工具。使用 ComponentOne Studio ASP.NET MVC 這款輕量級控件,能夠助力你的MVC開發過程。
--------------------------------------------------------------------------------------------------------------------
譯者注:
本系列共9篇文章,翻譯自Asp.Net MVC4 官方教程,因爲本系列文章言簡意賅,篇幅適中,從一個示例開始講解,全文最終完成了一個管理影片的小系統,很是適合新手入門Asp.Net MVC4,並由此開始開發工做。9篇文章爲:
1. Asp.Net MVC4 入門介紹
・ 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4
・ 譯文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/11/01/2749906.html
2. 添加一個控制器
・ 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-controller
・ 譯文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/11/02/2751015.html
3. 添加一個視圖
・ 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-view
・ 譯文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/11/06/2756711.html
4. 添加一個模型
・ 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-model
・ 譯文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/12/17/2821495.html
5. 從控制器訪問數據模型
・ 譯文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/01/11/2855935.html
6. 驗證編輯方法和編輯視圖
・ 譯文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/01/24/2874622.html
7. 給電影表和模型添加新字段
・ 譯文地址:http://powertoolsteam.blog.51cto.com/2369428/1140334
8. 給數據模型添加校驗器
・ 譯文地址:http://powertoolsteam.blog.51cto.com/2369428/1147449
9. 查詢詳細信息和刪除記錄
・ 譯文地址:http://powertoolsteam.blog.51cto.com/2369428/1149311
10.第三方控件Studio for ASP.NET Wijmo MVC4 工具應用