Code First Migrations を使用すると、Visual Studio 内からデータベースを更新できますが、コマンド ライン ツール migrate.exeを使用して実行することもできます。 このページでは、migrate.exe を使用してデータベースに対して移行を実行する方法について簡単に説明します。
注
この記事では、基本的なシナリオで Code First Migrations を使用する方法について説明します。 そうでない場合は、続行する前に Code First Migrations を読む必要があります。
migrate.exe のコピー
NuGet migrate.exe を使用して Entity Framework をインストールすると、ダウンロードしたパッケージの tools フォルダー内に配置されます。 <project フォルダー>\packages\EntityFramework.<version>\tools
migrate.exe が手元にあれば、移行を含むアセンブリの場所にコピーする必要があります。
アプリケーションが 4.5 ではなく .NET 4 を対象とする場合は、 Redirect.config も場所にコピーし、 migrate.exe.config名前を変更する必要があります。これにより、migrate.exe は、Entity Framework アセンブリを見つけられるように、適切なバインド リダイレクトを取得します。
| .NET 4.5 | .NET 4.0 |
|---|---|
|
|
注
migrate.exe は x64 アセンブリをサポートしていません。
migrate.exe を適切なフォルダーに移動すると、それを使用してデータベースに対して移行を実行できるようになります。 すべてのユーティリティは、移行を実行するように設計されています。 移行を生成したり、SQL スクリプトを作成したりすることはできません。
オプションを表示する
Migrate.exe /?
上記では、このユーティリティに関連付けられているヘルプ ページが表示されます。これを機能させるには、migrate.exe を実行しているのと同じ場所に EntityFramework.dll が必要であることに注意してください。
最新の移行プロセスに移行する
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 から継承するクラス) がある場合は、この実行に使用するクラスを指定する必要があります。 これは、上記のようにスイッチなしでオプションの 2 番目のパラメーターを指定することによって指定されます。
接続文字列を指定する
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' またはその依存関係の 1 つを読み込めませんでした。 指定したアセンブリのマニフェスト定義がアセンブリ参照と一致しません。 (HRESULT からの例外: 0x80131040) | これは通常、Redirect.config ファイルなしで .NET 4 アプリケーションを実行していることを意味します。 Redirect.config を migrate.exe と同じ場所にコピーし、migrate.exe.configに名前を変更する必要があります。 |
| ハンドルされない例外: System.IO.FileLoadException: ファイルまたはアセンブリ 'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' またはその依存関係の 1 つを読み込めませんでした。 指定したアセンブリのマニフェスト定義がアセンブリ参照と一致しません。 (HRESULT からの例外: 0x80131040) | この例外は、Redirect.config が migrate.exe の場所にコピーされた .NET 4.5 アプリケーションを実行していることを意味します。 アプリが .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 でのみ機能します。 |
.NET