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


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

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

一、在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; } }

第二、使用菜單“生成-->生成解決方案”來生成應用程序。或按下CTRL-SHIFT-B。 
第三、現在你已經更新了模型類,你還需要更新在\ 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> 

第四、在“解決方案資源管理器”中打開“Views\Book\Create.cshtml文件,並在文件的末尾附近添加下面的標記。這里使用一個文本框,方便您可以創建一個新的書籍時指定一個“Rating”。代碼如下。

 

<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>

第五、現在已經更新了應用程序的代碼,應用程序已經可以支持新的“Rateing”屬性。 
F5,運行應用程序,在瀏覽器中瀏覽/Book/Index網址。此時你會看到下面的這個錯誤。如下圖1、圖2

 

1

 

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" }

 

第六、執行菜單--》工具--》生成--》生成解決方案,然后在程序包管理器控制台窗口中輸入“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"); } }

第七、執行菜單--》工具--》生成--》生成解決方案,然后在程序包管理器控制台窗口中輸入“update-database”命令。 如下圖。
下圖顯示了在程序包管理器控制台窗口中的輸出(時間戳前面加上AddRatingMig會有所不同。)

 

 

F5,重新運行這個應用程序,使用瀏覽器瀏覽/Book/Index網址。你可以看到新的列表頁面,會增加一個Rating字段進行顯示。如下圖。

 

第八、單擊“Create New”鏈接,將導航到添加一個新的書籍信息的頁面。請注意,在這個新的頁面中,您可以添加一個等級字段信息。

 

單擊“Create”按鈕。一本新的書籍數據,包括評級字段,現在都顯示在列表中了:如下圖。

 

你也應該將Rating字段添加到EditDetailsSearchIndex三個視圖模板。 
你可以再次進入程序包管理器控制台窗口中執行“update-database”命令,窗口中輸入內容並沒有變化,因為架構模型相匹配。

在這第八、第九兩篇文章中,您學會了如何修改模型對象;學會如何在修改模型對象之后更新數據庫的結構;學會如何使用樣本數據來填充新創建的數據庫。

 

 

學習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 ”工具使用示例

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM