Asp.Net MVC4入門指南(7):給電影表和模型添加新欄位

來源:互聯網
上載者:User

在本節中,您將使用Entity Framework Code First來實現模型類上的操作。從而使得這些操作和變更,可以應用到資料庫中。

預設情況下,就像您在之前的教程中所作的那樣,使用 Entity Framework Code First自動建立一個資料庫,Code First為資料庫所添加的表,將協助您追蹤資料庫是否和從它產生的模型類是同步的。如果他們不是同步的,Entity Framework將拋出一個錯誤。這非常方便的在開發時就可以發現錯誤,否則您可能會在運行時才發現這個問題。 (由一個晦澀的錯誤資訊,才發現這個問題。)

為物件模型的變更設定 Code First Migrations

如果您使用的是 Visual Studio 2012,從方案總管中雙擊Movies.mdf,開啟資料庫工具。Visual Studio Express for Web將顯示資料庫總管,Visual Studio 2012 將顯示伺服器總管。如果您使用的是Visual Studio 2010,請使用 SQL Server物件總管。

在資料庫工具 (資料庫總管、 伺服器總管或 SQL Server物件總管),按右鍵MovieDBContext ,並選擇刪除以刪除電影資料庫。

返回到方案總管。在Movies.mdf檔案上按右鍵,並選擇刪除以刪除電影資料庫。

Build應用程式,以確保沒有任何編譯錯誤。

工具菜單上,單擊庫包管理器,然後點擊封裝管理員控制台.

軟體包管理器控制台 視窗中 PM> 提示符下輸入"Enable-Migrations –ContextTypeName MvcMovie.Models.MovieDBContext"。

(如上所示)Enable-Migrations命令會在Migrations檔案夾中建立一個Configuration.cs檔案。

在Visual Studio 中開啟Configuration.cs檔案。把Configuration.cs檔案中的Seed方法,替換為下面的代碼:

protected override void Seed(MvcMovie.Models.MovieDBContext context) { context.Movies.AddOrUpdate( i => i.Title, new Movie { Title = "When Harry Met Sally", ReleaseDate = DateTime.Parse("1989-1-11"), Genre = "Romantic Comedy", Price = 7.99M }, new Movie { Title = "Ghostbusters ", ReleaseDate = DateTime.Parse("1984-3-13"), Genre = "Comedy", Price = 8.99M }, new Movie { Title = "Ghostbusters 2", ReleaseDate = DateTime.Parse("1986-2-23"), Genre = "Comedy", Price = 9.99M }, new Movie { Title = "Rio Bravo", ReleaseDate = DateTime.Parse("1959-4-15"), Genre = "Western", Price = 3.99M } ); }

在Movie下面出現的紅色波浪線上按右鍵,並選擇Resolve然後點擊using MvcMovie.Models

這樣做之後,將添加以下的 using語句:

using MvcMovie.Models;

每次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類如下:

public class Movie { public int ID { get; set; } public string Title { get; set; } public DateTime ReleaseDate { get; set; } public string Genre { get; set; } public decimal Price { get; set; } public string Rating { get; set; } }

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視圖模板:

@model IEnumerable<MvcMovie.Models.Movie> @{ ViewBag.Title = "Index"; } <h2>Index</h2> <p> @Html.ActionLink("Create New", "Create") </p> <table> <tr> <th> @Html.DisplayNameFor(model => model.Title) </th> <th> @Html.DisplayNameFor(model => model.ReleaseDate) </th> <th> @Html.DisplayNameFor(model => model.Genre) </th> <th> @Html.DisplayNameFor(model => model.Price) </th> <th> @Html.DisplayNameFor(model => model.Rating) </th> <th></th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.Title) </td> <td> @Html.DisplayFor(modelItem => item.ReleaseDate) </td> <td> @Html.DisplayFor(modelItem => item.Genre) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.DisplayFor(modelItem => item.Rating) </td> <td> @Html.ActionLink("Edit", "Edit", new { id=item.ID }) | @Html.ActionLink("Details", "Details", new { id=item.ID }) | @Html.ActionLink("Delete", "Delete", new { id=item.ID }) </td> </tr> } </table>

下一步,開啟\Views\Movies\Create.cshtml檔案,並在form標籤結束處的附近添加如下代碼。您可以在建立新的電影時指定一個電影等級。

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

現在,您已經更新應用程式代碼以支援了新的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 方法中,您可以看到建立新列的代碼:

public partial class AddRatingMig : DbMigration
{
public override void Up()
{
AddColumn("dbo.Movies", "Rating", c => c.String());
}

public override void Down()
{
DropColumn("dbo.Movies", "Rating");
}
}

Build解決方案,然後在 封裝管理員控制台 視窗中輸入"update-database"命令。

下面的圖片顯示了 封裝管理員控制台 視窗的輸出 (AddRatingMig 的首碼時間戳記將有所不同)。

重新運行應用程式,然後瀏覽 /Movies 的 URL。您可以看到新的評級欄位。

單擊CreateNew連結來添加一部新電影。注意,請您可以為電影添加評級。

單擊Create。新的電影,包括評級,將顯示在電影列表中:

此外您也應該把Rating 欄位添加到編輯、 詳細資料和 SearchIndex 的視圖模板中。

您可以再次在 封裝管理員控制台 視窗中輸入"update-database"命令,將不會有任何新的變化,因為資料庫Schema 和模型類現在是匹配的。

在本節中,您看到了如何修改模型對象並始終保持其和資料庫Schema的同步。您還學習了使用填充樣本資料來建立新資料庫的例子,您可以反覆嘗試。接下來,讓我們看看如何將豐富的驗證邏輯添加到模型類,並對模型類執行一些強制的商務規則驗證。

 

完整文檔下載:Asp.Net MVC4入門指南.pdf

--------------------------------------------------------------------------------------------------------------------

譯者註:

本系列共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.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/accessing-your-models-data-from-a-controller

· 譯文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/01/11/2855935.html

6. 驗證編輯方法和編輯檢視

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/examining-the-edit-methods-and-edit-view

· 譯文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/01/24/2874622.html

7. 給電影表和模型添加新欄位

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-new-field-to-the-movie-model-and-table

· 譯文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/02/26/2933105.html

8. 給資料模型添加校正器

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-validation-to-the-model

· 譯文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/03/05/2944030.html

9. 查詢詳細資料和刪除記錄

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/examining-the-details-and-delete-methods

· 譯文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/03/07/2948000.html

 10.第三方控制項Studio for ASP.NET Wijmo MVC4 工具應用

· 地址:http://www.cnblogs.com/powertoolsteam/archive/2013/05/09/3068699.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.