在上一篇文章中,咱們學習瞭如何使用實體框架的「Code First Migrations 」工具,使用其中的「遷移」功能對模型類進行一些修改,同時同步更新對應數據庫的表結構。html
在本文章中,咱們將使用「Code First Migrations 」工具。使用其中的「Send」更新方法,添加Rating字段到每一個Book對象與數據庫表中。數據庫
首先,在Visual Studio打開Models\ Book.cs文件,在Book類中添加一個新的Rating屬性。代碼以下:瀏覽器
public string Rating { get; set; }
完整的Book類。代碼以下。
架構
public class Book { public int BookID { get; set; } public string Category { get; set; } public string Name { get; set; } public int Numberofcopies { get; set; } public int AuthorID { get; set; } public decimal Price { get; set; } public DateTime PublishDate { get; set; } public string Rating { get; set; } }
第2、使用菜單「生成-->生成解決方案」來生成應用程序。或按下CTRL-SHIFT-B。
第3、如今你已經更新了模型類,你還須要更新在\ Views\Book\ Index.cshtml和\Views\Book\ Create.cshtml視圖模板,以便在瀏覽器視圖中顯示新的「Rating」屬性。
在解決方案管理器中打開,Views\Book\Index.cshtml文件,並在PublishDate列標題後面添加一個<TH>Rating</TH>列。而後在PublishDate列後面添加一個<TD>列,用來呈現Rating值。下面是更新後的Index.cshtml視圖模板的代碼:框架
@model IEnumerable<MvcApplication1.Models.Book> @{ ViewBag.Title = "Index"; } <h2>Index</h2>
<p> @Html.ActionLink("Create New", "Create") </p>
<table>
<tr>
<th> @Html.DisplayNameFor(model => model.Category) </th>
<th> @Html.DisplayNameFor(model => model.Name) </th>
<th> @Html.DisplayNameFor(model => model.Numberofcopies) </th>
<th> @Html.DisplayNameFor(model => model.AuthorID) </th>
<th> @Html.DisplayNameFor(model => model.Price) </th>
<th> @Html.DisplayNameFor(model => model.PublishDate) </th>
<th> @Html.DisplayNameFor(model => model.Rating) </th>
<th></th>
</tr> @foreach (var item in Model) { <tr>
<td> @Html.DisplayFor(modelItem => item.Category) </td>
<td> @Html.DisplayFor(modelItem => item.Name) </td>
<td> @Html.DisplayFor(modelItem => item.Numberofcopies) </td>
<td> @Html.DisplayFor(modelItem => item.AuthorID) </td>
<td> @Html.DisplayFor(modelItem => item.Price) </td>
<td> @Html.DisplayFor(modelItem => item.PublishDate) </td>
<td> @Html.DisplayFor(model => item.Rating) </td>
<td> @Html.ActionLink("Edit", "Edit", new { id=item.BookID }) | @Html.ActionLink("Details", "Details", new { id=item.BookID }) | @Html.ActionLink("Delete", "Delete", new { id=item.BookID }) </td>
</tr> } </table>
第4、在「解決方案資源管理器」中打開「Views\Book\Create.cshtml文件,並在文件的末尾附近添加下面的標記。這裏使用一個文本框,方便您能夠建立一個新的書籍時指定一個「Rating」。代碼以下。ide
<div class="editor-label"> @Html.LabelFor(model => model.Rating) </div>
<div class="editor-field"> @Html.EditorFor(model => model.Rating) @Html.ValidationMessageFor(model => model.Rating) </div>
第5、如今已經更新了應用程序的代碼,應用程序已經能夠支持新的「Rateing」屬性。
按F5,運行應用程序,在瀏覽器中瀏覽/Book/Index網址。此時你會看到下面的這個錯誤。以下圖1、圖2。工具
圖1post
圖2學習
之因此出現這個錯誤信息,是由於在應用程序更新的Book模型類與現有數據庫的Book表的架構不一樣。 (即Book模型類中有一個新的屬性Rating,而數據庫中的Book表中卻沒有這個字段。 )
這個錯誤能夠經過如下幾個方法來解決這個錯誤:測試
1 ) 由實體構架使用新實體的新模型類架構自動刪除並從新建立數據庫。這種作法能很是方便的建立一個測試數據庫;它可讓你快速進行開發,模型和數據庫架構是在一塊兒的。不過這種方法的缺點是,你將失去數據庫中已經存在的數據 ——因此不建議在生產環境使用這種方法!使用這種方式自動生成一個數據庫,並在數據庫中插入初始化的測試數據是很是方便的方式,而且能夠快速開發應用程序。
2 ) 手動修改現有數據庫的架構,讓它匹配新的模型類。這種方法的好處是,你能夠保有你已經存在的測試數據。您能夠手動或經過建立一個數據庫更改腳本進行此更改。
3,使用「Code First Migrations 」工具更新數據庫架構。
在本文章中,咱們將使用「Code First Migrations 」工具。
更新「Send」方法,以便它提供了新的列的值。打開Migrations\Configuration.cs文件,添加Rating字段到每一個Book對象中。代碼以下。
new Book { Name = "DB 2", PublishDate = DateTime.Parse("1986-2-23"), Category = "IBM", AuthorID=1, Numberofcopies=22, Price = 9.99M, Rating = "H" }
第6、執行菜單--》工具--》生成--》生成解決方案,而後在程序包管理器控制檯窗口中輸入「add-migration AddRatingMig」命令。 以下圖。
下圖顯示了在程序包管理器控制檯窗口中的輸出(時間戳前面加上AddRatingMig會有所不一樣。)
這個「add-migration 」命令告訴遷移框架,研究當前Book的模型與當前Book數據庫模式,並創建必要的代碼到數據庫遷移到新的模型。該AddRatingMig是任意的,是用來命名遷移文件。它有助於使用一個有意義的名稱遷移步驟。
當這個命令執行完成後,Visual Studio將打開一個新定義的DbMIgration派生類的類文件,你能夠參閱新建立的代碼,代碼以下。
public partial class AddRatingMig : DbMigration { public override void Up() { AddColumn("dbo.Books", "Rating", c => c.String()); } public override void Down() { DropColumn("dbo.Books", "Rating"); } }
第7、執行菜單--》工具--》生成--》生成解決方案,而後在程序包管理器控制檯窗口中輸入「update-database」命令。 以下圖。
下圖顯示了在程序包管理器控制檯窗口中的輸出(時間戳前面加上AddRatingMig會有所不一樣。)
按F5,從新運行這個應用程序,使用瀏覽器瀏覽/Book/Index網址。你能夠看到新的列表頁面,會增長一個Rating字段進行顯示。以下圖。
第8、單擊「Create New」連接,將導航到添加一個新的書籍信息的頁面。請注意,在這個新的頁面中,您能夠添加一個等級字段信息。
單擊「Create」按鈕。一本新的書籍數據,包括評級字段,如今都顯示在列表中了:以下圖。
你也應該將Rating字段添加到Edit,Details及SearchIndex三個視圖模板。
你能夠再次進入程序包管理器控制檯窗口中執行「update-database」命令,窗口中輸入內容並無變化,由於架構模型相匹配。
在這第8、第九兩篇文章中,您學會了如何修改模型對象;學會如何在修改模型對象以後更新數據庫的結構;學會如何使用樣本數據來填充新建立的數據庫。
學習ASP.NET MVC系列:
學習ASP.NET MVC(一)——個人第一個ASP.NET MVC應用程序
學習ASP.NET MVC(二)——個人第一個ASP.NET MVC 控制器
學習ASP.NET MVC(三)——個人第一個ASP.NET MVC 視圖
學習ASP.NET MVC(四)——個人第一個ASP.NET MVC 實體對象
學習ASP.NET MVC(五)——個人第一個ASP.NET MVC CURD頁面
學習ASP.NET MVC(六)——個人第一個ASP.NET MVC 編輯頁面
學習ASP.NET MVC(七)——個人第一個ASP.NET MVC 查詢頁面