背景: システムを Entity Framework 4.3.1 から 5 にアップグレードし、VS 2010 から VS 2012 に移行しました。また、MVC3 から MVC4 にアップグレードしました。私はEF Migrations Code Firstを使用しています。
これはすべて私のマシンで完全に機能しているため、テストサーバーを新しいコードでアップグレードしようとしています。
最初に、サーバーに.Net 4.5を問題なくインストールしました(その後のすべてのWindowsアップデートを含む)。次に、システムがアップグレードされたサーバーで引き続き実行されることを確認しました。
次に、VS2012 の新しい「発行...」ウィザードを使用して展開パッケージをビルドします。ここでは、「コードの最初の移行を実行する (アプリケーションの開始時に実行)」というチェックボックスをオンにしないことにしました。これは、インストール直後に、migrate.exe を明示的に呼び出してこれを実行したいからです。
ここで、テスト システムのアップグレードを試みます。展開は問題なく動作しますが、migrate.exe への呼び出しを実行しようとすると、最初に次のメッセージが表示されます。
「保留中のコードベースの移行はありません。」次に、次のことを示す大きな赤いテキスト ブロックが表示されます。
「エラー: 保留中の変更があり、自動移行が無効になっているため、現在のモデルに一致するようにデータベースを更新できません。保留中のモデルの変更をコードベースの移行に書き込むか、自動移行を有効にしてください。自動移行を有効にするには、DbMigrationsConfiguration.AutomaticMigrationsEnabled を true に設定してください。 ."
そして、システムを使用しようとすると、データベースの有効性を検証するための次の呼び出しが false を返します: context.Database.CompatibleWithModel(true) これはシステムによって受け入れられず、シャットダウンします。
次に、__MigratHistory の CreatedOn 列を置き換えた後、以前のパッケージに戻しました。システムは再び魔法のように機能します。以下は、元に戻すために使用するSQLスクリプトです...
alter table dbo.__MigrationHistory
add CreatedOn datetime null
go
Update s
Set s.CreatedOn = CAST(SUBSTRING(s.MigrationId, 1, 8) as datetime) + CAST(SUBSTRING(s.MigrationId, 9, 2) + ':' + SUBSTRING(s.MigrationId, 11, 2) as time),
s.ProductVersion = '4.3.1'
from dbo.__MigrationHistory s
私が間違っていることについて何か提案はありますか?