學習ASP.NET MVC(九)——「Code First Migrations 」工具使用示例

在上一篇文章中,咱們學習瞭如何使用實體框架的「Code First Migrations 」工具,使用其中的「遷移」功能對模型類進行一些修改,同時同步更新對應數據庫的表結構。html

在本文章中,咱們將使用「Code First Migrations 」工具。使用其中的Send」更新方法,添加Rating字段到每一個Book對象與數據庫表中。數據庫

1、在Book模型中添加「Rating」屬性 


首先,在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字段添加到EditDetailsSearchIndex三個視圖模板。 
你能夠再次進入程序包管理器控制檯窗口中執行「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 查詢頁面

學習ASP.NET MVC(八)——「Code First Migrations 」工具

學習ASP.NET MVC(九)——「Code First Migrations 」工具使用示例

相關文章
相關標籤/搜索