共用方式為


使用 migrate.exe

Code First 移轉可用來從 Visual Studio 內部更新資料庫,但也可以透過命令列工具 migrate.exe 來執行。 此頁面將快速概觀如何使用 migrate.exe 對資料庫執行移轉。

注意

本文假設您知道如何在基本案例中使用Code First 移轉。 如果您未這麼做,則必須先閱讀 Code First 移轉 再繼續。

複製 migrate.exe

當您使用 NuGet migrate.exe 安裝 Entity Framework 時,將會位於所下載套件的工具資料夾中。 在 < 專案資料夾 > \packages\EntityFramework 中。 <version > \tools

一旦您擁有 migrate.exe,您必須將它複製到包含移轉的元件位置。

如果您的應用程式以 .NET 4 為目標,而不是 4.5,則您也必須將 Redirect.config 複製到 位置,並將它 重新命名為 migrate.exe.config 如此一來,migrate.exe 會取得正確的系結重新導向,以找出 Entity Framework 元件。

.NET 4.5 .NET 4.0
.NET 4.5 Files .NET 4.0 Files

注意

migrate.exe 不支援 x64 元件。

將 migrate.exe 移至正確的資料夾之後,您應該能夠用它來對資料庫執行移轉。 所有公用程式的設計都是執行移轉。 它無法產生移轉或建立 SQL 腳本。

請參閱選項

Migrate.exe /?

上述會顯示與此公用程式相關聯的說明頁面,請注意,您必須將 EntityFramework.dll 放在您執行 migrate.exe 的相同位置,才能運作。

移轉至最新的移轉

Migrate.exe MyMvcApplication.dll /startupConfigurationFile="..\\web.config"

執行 migrate.exe 時,唯一的必要參數是元件,這是包含您嘗試執行的移轉的元件,但如果未指定組態檔,則會使用所有慣例型設定。

移轉至特定移轉

Migrate.exe MyApp.exe /startupConfigurationFile="MyApp.exe.config" /targetMigration="AddTitle"

如果您想要執行移轉至特定移轉,則可以指定移轉的名稱。 這將會視需要執行所有先前的移轉,直到到達指定的移轉為止。

指定工作目錄

Migrate.exe MyApp.exe /startupConfigurationFile="MyApp.exe.config" /startupDirectory="c:\\MyApp"

如果您元件具有相對於工作目錄的相依性或讀取檔案,則必須設定 startupDirectory。

指定要使用的移轉組態

Migrate.exe MyAssembly CustomConfig /startupConfigurationFile="..\\web.config"

如果您有多個移轉組態類別,則繼承自 DbMigrationConfiguration 的類別,則必須指定要用於此執行的類別。 這是藉由提供選擇性的第二個參數來指定,而不需要如上所示的參數。

提供連接字串

Migrate.exe BlogDemo.dll /connectionString="Data Source=localhost;Initial Catalog=BlogDemo;Integrated Security=SSPI" /connectionProviderName="System.Data.SqlClient"

如果您想要在命令列指定連接字串,您也必須提供提供者名稱。 未指定提供者名稱會導致例外狀況。

常見問題

錯誤訊息 解決方案
未處理的例外狀況:System.IO.FileLoadException:無法載入檔案或元件 'EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 或其其中一個相依性。 找到的元件資訊清單定義不符合元件參考。 (HRESULT 例外:0x80131040) 這通常表示您執行 .NET 4 應用程式時沒有 Redirect.config 檔案。 您必須將 Redirect.config 複製到與 migrate.exe 相同的位置,並將它重新命名為 migrate.exe.config。
未處理的例外狀況:System.IO.FileLoadException:無法載入檔案或元件 'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 或其其中一個相依性。 找到的元件資訊清單定義不符合元件參考。 (HRESULT 例外:0x80131040) 這個例外狀況表示您正在執行 .NET 4.5 應用程式,並將 Redirect.config 複製到 migrate.exe 位置。 如果您的應用程式是 .NET 4.5,則您不需要具有 內部重新導向的組態檔。 刪除 migrate.exe.config 檔案。
錯誤:無法更新資料庫以符合目前的模型,因為有暫止的變更,且已停用自動移轉。 將擱置的模型變更寫入程式碼型移轉,或啟用自動移轉。 將 DbMigrationsConfiguration.AutomaticMigrationsEnabled 設定為 true 以啟用自動移轉。 如果您尚未建立移轉以應付模型所做的變更,且資料庫不符合模型,就會發生此錯誤。 將屬性新增至模型類別,然後執行 migrate.exe,而不需要建立移轉來升級資料庫就是此範例。
錯誤:成員 'System.Data.Entity.Migrations.Design.ToolingFacade+UpdateRunner,EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 無法解析類型。 這個錯誤可能是藉由指定不正確的啟動目錄所造成。 這必須是 migrate.exe 的位置
未處理的例外狀況:System.NullReferenceException:物件參考未設定為物件的實例。
   at System.Data.Entity.Migrations.Console.Program.Main(String[] args)
這可能會因為未針對您使用的案例指定必要的參數所造成。 例如,指定連接字串而不指定提供者名稱。
錯誤:元件 'ClassLibrary1' 中找到多個移轉組態類型。 指定要使用的名稱。 當錯誤狀態時,指定元件中有多個組態類別。 您必須使用 /configurationType 參數來指定要使用的參數。
錯誤:無法載入檔案或元件 ' < assemblyName > ' 或其其中一個相依性。 指定的元件名稱或程式碼基底無效。 (HRESULT 例外:0x80131047) 這可能是因為指定元件名稱不正確或沒有
錯誤:無法載入檔案或元件 ' < assemblyName > ' 或其其中一個相依性。 嘗試載入了格式不正確的程式。 如果您嘗試對 x64 應用程式執行 migrate.exe,就會發生這種情況。 EF 5.0 和以下版本只能在 x86 上運作。