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 ,並選擇刪除以刪除電影資料庫。

650) this.width=650;" style="border-top-width:0px;border-bottom-width:0px;border-left-width:0px;border-right-:" title="clip_image001" border="0" alt="clip_image001" width="439" height="352" src="http://www.bkjia.com/uploads/allimg/131228/115R62112-0.png" />

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

650) this.width=650;" style="border-top-width:0px;border-bottom-width:0px;border-left-width:0px;border-right-:" title="clip_image002" border="0" alt="clip_image002" width="345" height="447" src="http://www.bkjia.com/uploads/allimg/131228/115R64147-1.png" />

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

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

650) this.width=650;" style="border-top-width:0px;border-bottom-width:0px;border-left-width:0px;border-right-:" title="clip_image003" border="0" alt="clip_image003" width="607" height="292" src="http://www.bkjia.com/uploads/allimg/131228/115R635b-2.png" />

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

650) this.width=650;" style="border-top-width:0px;border-bottom-width:0px;border-left-width:0px;border-right-:" title="clip_image004" border="0" alt="clip_image004" width="740" height="348" src="http://www.bkjia.com/uploads/allimg/131228/115R61010-3.png" />

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

650) this.width=650;" style="border-top-width:0px;border-bottom-width:0px;border-left-width:0px;border-right-:" title="clip_image005" border="0" alt="clip_image005" width="279" height="332" src="http://www.bkjia.com/uploads/allimg/131228/115R64K7-4.png" />

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

?

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

650) this.width=650;" style="border-top-width:0px;border-bottom-width:0px;border-left-width:0px;border-right-:" title="clip_image006" border="0" alt="clip_image006" width="606" height="390" src="http://www.bkjia.com/uploads/allimg/131228/115RB9E-5.png" />

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

?

每次Code First Migrations 會調用Seed 方法即,在封裝管理員控制台中調用update-database),並且此次調用會更新行:更新已經插入的行,或把不存在的行也插入。

CTRL-SHIFT-B Build工程。如果此次Build不成功,以下的步驟將會失敗。)

下一步是建立一個DbMigration類,用於初始化資料庫遷移。此遷移類將建立新的資料庫,這也就是為什麼在之前的步驟中你要刪除movie.mdf檔案。

軟體包管理器控制台視窗中,輸入"add-migration Initial"命令來建立初始遷移。" Initial" 的名稱是任意,是用於建立遷移檔案的名稱。

650) this.width=650;" style="border-top-width:0px;border-bottom-width:0px;border-left-width:0px;border-right-:" title="clip_image007" border="0" alt="clip_image007" width="725" height="346" src="http://www.bkjia.com/uploads/allimg/131228/115R61B2-6.png" />

Code First Migrations將會在Migrations檔案夾中建立另一個類檔案 檔案名稱為: {DateStamp}_Initial.cs ),此類中包含的代碼將建立資料庫的Schema。遷移檔案名稱使用時間戳作為首碼,以協助用來排序和尋找。查看{DateStamp}_Initial.cs檔案,它包含了為電影資料庫建立電影表的說明。當您更新資料庫時,{DateStamp}_Initial.cs檔案將會被運行並建立 DB 的Schema。然後Seed方法將運行,用來填充 DB 的測試資料。

軟體包管理器控制台中,輸入命令" update-database ",建立資料庫並運行Seed方法。

650) this.width=650;" style="border-top-width:0px;border-bottom-width:0px;border-left-width:0px;border-right-:" title="clip_image008" border="0" alt="clip_image008" width="714" height="348" src="http://www.bkjia.com/uploads/allimg/131228/115R640K-7.png" />

如果您收到表已經存在並且無法建立的錯誤,可能是因為您已經刪除了資料庫,並且在執行update-database之前,您運行了應用程式。在這種情況下,再次刪除Movies.mdf檔案,然後重試update-database命令。如果您仍遇到錯誤,刪除Migration檔案夾及其內容,然後從頭開始重做。即刪除Movies.mdf檔案,然後再進行Enable-Migrations)

運行該應用程式,然後瀏覽URL /Movies Seed資料顯示如下:

650) this.width=650;" style="border-top-width:0px;border-bottom-width:0px;border-left-width:0px;border-right-:" title="clip_image009" border="0" alt="clip_image009" width="752" height="593" src="http://www.bkjia.com/uploads/allimg/131228/115RCP9-8.png" />

為影片模型添加評級屬性

給現有的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。然而,當您這樣做時,您將看到以下之一的錯誤資訊:

650) this.width=650;" style="border-top-width:0px;border-bottom-width:0px;border-left-width:0px;border-right-:" title="clip_image010" border="0" alt="clip_image010" width="458" height="385" src="http://www.bkjia.com/uploads/allimg/131228/115R620A-9.png" />

650) this.width=650;" style="border-top-width:0px;border-bottom-width:0px;border-left-width:0px;border-right-:" title="clip_image011" border="0" alt="clip_image011" width="626" height="587" src="http://www.bkjia.com/uploads/allimg/131228/115R610M-10.png" />

你現在看到此錯誤,因為在應用程式中,最新的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 的首碼時間戳記將有所不同)。

650) this.width=650;" style="border-top-width:0px;border-bottom-width:0px;border-left-width:0px;border-right-:" title="clip_image012" border="0" alt="clip_image012" width="659" height="104" src="http://www.bkjia.com/uploads/allimg/131228/115RCR2-11.png" />

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

650) this.width=650;" style="border-top-width:0px;border-bottom-width:0px;border-left-width:0px;border-right-:" title="clip_image013" border="0" alt="clip_image013" width="794" height="605" src="http://www.bkjia.com/uploads/allimg/131228/115RB325-12.png" />

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

650) this.width=650;" style="border-top-width:0px;border-bottom-width:0px;border-left-width:0px;border-right-:" title="clip_image014" border="0" alt="clip_image014" width="490" height="746" src="http://www.bkjia.com/uploads/allimg/131228/115R63215-13.png" />

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

650) this.width=650;" style="border-top-width:0px;border-bottom-width:0px;border-left-width:0px;border-right-:" title="clip_image015" border="0" alt="clip_image015" width="666" height="688" src="http://www.bkjia.com/uploads/allimg/131228/115R61931-14.png" />

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

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

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


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

譯者註:

本系列共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://powertoolsteam.blog.51cto.com/2369428/1140334

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

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

· 譯文地址:http://powertoolsteam.blog.51cto.com/2369428/1147449

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

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

· 譯文地址:http://powertoolsteam.blog.51cto.com/2369428/1149311

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

· 地址:http://powertoolsteam.blog.51cto.com/2369428/1196469


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.