EF codefirst 資料庫遷移

來源:互聯網
上載者:User

標籤:blog   http   使用   os   strong   檔案   

如果出現 未能負載檔案或程式集“Microsoft.VisualStudio.Shell, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一個依賴項。系統找不到指定的檔案。

重新安裝EF 命令Install-Package EntityFramework

在此之後

主要是3步走:

1:Enable-Migrations -ContextTypeName MvcMovie.Models.MovieDbContext

2:add-migration Initial

3:update-database

在本節中,您將使用Entity Framework代碼先行遷移功能對模型類進行修改,並使修改應用到資料庫中。

預設情況下,當您使用Entity Framework代碼先行自動建立一個資料庫,像你在本教程前面做的那樣,代碼首先添加一張表到資料庫中,以協助追蹤資料庫架構是否是同步的模型類是產生的。如果它們不同步,Entity Framework拋出一個錯誤。這使得它更容易在早期開發時跟蹤發現問題,否則,你可能在運行時發現隱晦錯誤。

為模型修改建立代碼先行遷移
如果您使用的是Visual Studio 2012,在“方案總管”中雙擊Movies.mdf的檔案,開啟資料庫工具。Visual Studio Express for Web將顯示“資料庫總管,Visual Studio2012將顯示”伺服器總管“。如果您使用的是Visual Studio 2010中,使用SQL Server物件總管。

在資料庫工具中,在MovieDbContext上右鍵點擊並選擇刪除。
回到方案總管。在 Movies.mdf file檔案上按右鍵並選擇刪除。

譯者註:此處看上去很費解,事實上,第一步實際執行的操作是刪除資料庫連結,彈出的刪除確認提示也說明了這一點,第二步則是在解決方案管理器裡真正刪除資料庫檔案。

產生應用程式,確認沒有編譯錯誤。
在vs2012工具菜單裡,點擊“庫封裝管理員”-》封裝管理員控制台
在控制台的PM>標記後,輸入“Enable-Migrations -ContextTypeName MvcMovie.Models.MovieDbContext”
 
輸出如下資訊:
PM> Enable-Migrations -ContextTypeName MvcMovie.Models.MovieDbContext
正在檢查內容相關的目標是否為現有資料庫...
已為項目 MvcMovie 啟用 Code First 移轉。
PM>

上面的Enable-Migrations命令建立了一個新的Migrations檔案夾,並在該目錄下建立了Configuration.cs檔案。
使用Visual Studio開啟Configuration.cs檔案。使用以下代碼替換Seed方法內容:

        protected override void Seed(MvcMovie.Models.MovieDbContext context)        {                       context.Movies.AddOrUpdate(              m => m.Name,              new Movie { Name = "少年派的奇幻漂流之旅",Date=DateTime.Now },              new Movie { Name = "一九四二", Date = DateTime.Now },              new Movie { Name = "王的盛宴", Date = DateTime.Now }            );                   }

以上代碼需要類中匯入名稱空間using MvcMovie.Models;

代碼先行遷移機制在每次遷移後調用Seed方法,如果存在行資料,則該方法更新現有資料,如果不存在,則該方法插入資料。

按下CTRL+SHIFT+B來產生項目(如果此處不執行此產生操作,後續的步驟會失敗)

下一步是建立DbMigration 類來初始化遷移。遷移將建立一個新的資料庫,這也是在前面步驟中刪除資料庫檔案的原因。
在封裝管理員控制台視窗,輸入命令"add-migration Initial"來建立初始遷移。其中Initial可以是任意名稱,用來標識建立的初始檔案。控制台輸出如下:

PM> add-migration Initial
正在為遷移“Initial”搭建基架。
此遷移檔案的設計器程式碼封裝含當前 Code First 模型的快照。在下一次搭建遷移基架時,將使用此快照計算對模型的更改。如果對要包含在此遷移中的模型進行其他更改,則您可通過再次運行“Add-Migration 201212060747227_Initial”重新搭建基架。
PM>

代碼先行遷移機制在Migrations檔案夾下建立另外一個類檔案,檔案名稱為時間戳記+底線+ Initial.cs,例如201212060747227_Initial.cs,該類包含了建立資料庫結構描述的代碼。遷移檔案名稱預置為時間戳記有助於排序。查看該檔案,包含了建立Movie庫表的說明。當你更新資料庫時,該類將被執行,建立資料庫結構描述。隨後,Seed方法將被執行,測試資料被添加其中。

在封裝管理員控制台視窗,鍵入"update-database"命令來建立資料庫和執行Seed方法。
PM> update-database
指定“-Verbose”標記以查看應用於目標資料庫的 SQL 陳述式。
正在應用基於代碼的遷移: [201212060747227_Initial]。
正在應用基於代碼的遷移: 201212060747227_Initial。
正在運行 Seed 方法。
PM>


如果遇到表已存在的錯誤而不能建立,很可能是你刪除資料庫後,執行update-database前運行了應用程式(重新編譯器,自動建立了資料庫)。這種情況下,再次刪除資料庫檔案,並執行 update-database命令。如果仍然出錯,刪除migrations目錄和內容,重新開始本教程操作。

運行應用程式,導航到 /Movies 地址。種子資料顯示出來了。

譯者註:此處的種子資料,實際上指的是一些庫表建立後添加的一些測試資料或者系統初始化資料,如系統參數,部門的根目錄等。

聯繫我們

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