在本篇文章中,咱們學習如何使用實體框架的「Code First Migrations 」(也稱爲代碼先行功能)工具,使用其中的「遷移」功能對模型類進行一些修改,同時同步更新對應數據庫的表結構。sql
默認狀況下,當您使用實體框架的「Code First Migrations 」工具,實體框架會自動建立一個數據庫。「代碼先行功能」首先會添加一個新表到數據庫中,以便跟蹤數據庫的架構是否與模型類同步。若是它們不一樣步,實體框架會拋出一個錯誤。這樣開發人員在開發時就能更容易地追查問題出在什麼地方,而其餘的開發方式就只能在運行時經過模糊的錯誤信息查找什麼地方出錯了。 數據庫
若是您使用的是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是刪除數據庫。express
圖1瀏覽器
圖2服務器
2)執行菜單--》工具--》生成--》生成解決方案,以確保沒有錯誤。
3)從菜單--》工具菜單中,單擊庫程序包管理器--》程序包管理器控制檯。以下圖。架構
4)在Visual Studio的下方窗體中的「程序包管理器控制檯」窗口的「>」提示符下輸入「Enable-Migrations -ContextTypeName MvcApplication1.Models.BookDBContext」。以下圖。框架
5)在執行完Enable-Migrations命令以後(如上圖所示),會在項目中建立一個新的文件夾「Migrations」, 在這個文件夾中建立一個Configuration.cs文件。以下圖。ide
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 方法(即程序包管理器控制檯會調用此方法更新數據庫中的數據),而且執行該方法時若是代碼中的對象數據不存在則插入,若是存在則進行更新。
2、遷移數據庫
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方法中填充到數據庫中的數據。以下圖。