標籤:style blog http io color ar os 使用 sp
在本篇文章中,我們學習如何使用Entity Framework的“Code First Migrations ”(也稱為代碼先行功能)工具,使用其中的“遷移”功能對模型類進行一些修改,同時同步更新對應資料庫的表結構。
預設情況下,當您使用Entity Framework的“Code First Migrations ”工具,Entity Framework會自動建立一個資料庫。“代碼先行功能”首先會添加一個新表到資料庫中,以便追蹤資料庫的架構是否與模型類同步。如果它們不同步,Entity Framework會拋出一個錯誤。這樣開發人員在開發時就能更容易地追查問題出在什麼地方,而其他的開發方式就只能在運行時通過模糊的錯誤資訊尋找什麼地方出錯了。
一、設定代碼優先遷移的模型更改
如果您使用的是Visual Studio 2012,從方案總管中雙擊Test.mdf檔案,會開啟資料庫管理工具。其中Visual Studio Express For Web版本的VS將顯示資料庫總管,Visual Studio 2012其他版本會顯示伺服器總管。如果您使用的是Visual Studio 2010中,使用SQL Server物件總管。
1)在伺服器總管中—》“資料連線”中(資料庫管理工具、資料庫瀏覽器、伺服器總管或SQL Server物件總管),按右鍵developer\sqlexpress.Test.dbo,然後選擇刪除。如1、圖2。圖1是刪除串連,圖2是刪除資料庫。
圖1
圖2
2)執行菜單--》工具--》產生--》產生解決方案,以確保沒有錯誤。
3)從菜單--》工具菜單中,單擊庫封裝管理員--》封裝管理員控制台。如。
4)在Visual Studio的下方表單中的“封裝管理員控制台”視窗的“>”提示符下輸入“Enable-Migrations -ContextTypeName MvcApplication1.Models.BookDBContext”。如。
5)在執行完Enable-Migrations命令之後(如所示),會在項目中建立一個新的檔案夾“Migrations”, 在這個檔案夾中建立一個Configuration.cs檔案。如。
6)在Visual Studio中開啟Configuration.cs檔案。用下面的代碼替換Configuration.cs檔案的Send方法:
namespace MvcApplication1.Migrations{ using System; using System.Data.Entity; using System.Data.Entity.Migrations; using System.Linq; using MvcApplication1.Models; internal sealed class Configuration : DbMigrationsConfiguration<MvcApplication1.Models.BookDBContext> { public Configuration() { AutomaticMigrationsEnabled = false; } protected override void Seed(MvcApplication1.Models.BookDBContext context) { // This method will be called after migrating to the latest version. // You can use the DbSet<T>.AddOrUpdate() helper extension method // to avoid creating duplicate seed data. E.g. // // context.People.AddOrUpdate( // p => p.FullName, // new Person { FullName = "Andrew Peters" }, // new Person { FullName = "Brice Lambson" }, // new Person { FullName = "Rowan Miller" } // ); // context.Books.AddOrUpdate(i => i.BookID, new Book { Name = "When Harry Met Sally", PublishDate = DateTime.Parse("1989-1-11"), Category = "MS", AuthorID=1, Numberofcopies=12, Price = 7.99M }, new Book { Name = "Ghostbusters ", PublishDate = DateTime.Parse("1984-3-13"), Category = "MS", AuthorID=1, Numberofcopies=112, Price = 8.99M }, new Book { Name = "DB 2", PublishDate = DateTime.Parse("1986-2-23"), Category = "IBM", AuthorID=1, Numberofcopies=22, Price = 9.99M, } ); } }}
7)使用滑鼠右鍵單擊Book下的紅色波浪線,在快顯功能表中選擇“解析”功能表項目,然後在快顯功能表中選擇“MvcApplication1.Models”;如。
在經過這樣做了之後,Visual Studio會自動在代碼中增加using語句如下:
using MvcApplication1.Models;
在“封裝管理員控制台”視窗中執行了“Code First Migrations ”功能中的“遷移”命名之後,代碼會自動調用Send 方法(即封裝管理員控制台會調用此方法更新資料庫中的資料),並且執行該方法時如果代碼中的對象資料不存在則插入,如果存在則進行更新。
二、遷移資料庫
1) 如果此時在Visual Studio中按Ctrl-Shift-B(或者菜單-->產生-->產生解決方案)來編譯項目,將會出現編譯不了的錯誤。如。
2) 接下來要建立一個DbMigration類來進行初始遷移。使用這個遷移命名建立一個新的資料庫,這就是為什麼我在上一步中刪除了Test.mdf檔案。
3) 在封裝管理員控制台視窗中,輸入命令“dd-migration Initial”建立初始遷移。其中“Initial”的命名是任意的,是用來命名新建立的遷移檔案。如。
4)“Code First Migrations ”功能中的“遷移”命名會在遷移檔案夾中的建立一個新的類檔案(名為{DATESTAMP}_Initial.cs),而且這個類中已經包含了建立資料庫結構描述的代碼。遷移檔案名稱的命名規則中有一個固定的時間戳記,用以協助排序。檢查{DATESTAMP}_Initial.cs檔案,它包含了建立Books表的資料庫的說明。這個{DATESTAMP}_Initial.cs檔案將運行並建立資料庫結構描述。然後運行Send方法為資料庫填充測試資料。
5) 在封裝管理員控制台,輸入命令“update-database”來建立資料庫,並執行Send方法。如1,圖2。
圖1
圖2
如果你得到一個錯誤,指示表已經存在,不能被建立,它可能是因為你正在運行應用程式,在你刪除了資料庫之後,執行更新資料庫之前。(如1)。
在這種情況下,再次刪除Test.mdf檔案,然後重試“update-database”命令。如2。如果仍然出現錯誤,請刪除該檔案夾和內容,然後開始在這個頁面的頂部(也就是刪除Test.mdf檔案然後進行啟用,遷移)的說明。
6) 按F5運行應用程式,在瀏覽器中瀏覽Books/Index網址。會顯示Send方法中填充到資料庫中的資料。如。
學習ASP.NET MVC(八)——“Code First Migrations ”工具