2013-04-10 51 views
9

プロジェクト(VS2012 ExpressのASP.NET MVC)でしばらくEntity Framework(5.0)を使用しています。今は、もはやマイグレーションを追加できなくなりました。Entity Framework:Add-Migrationが失敗し、データベースを更新できません

PM > Add-Migration -projectName MyProject.DAL TestMigration 
Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration. 

これは任意の手掛かりを与えるだけに」できません...」というテキストが赤で表示されている場合、私は知らない。

を私は私として意味をなさないいる(自動移行を可能にするために試してみました保留中のモデル変更をコードベースの移行に書き込もうとする)、その結果、データベースに必要な移行が行われますが、プロジェクトで移行がないため、これは私が望むものではありません。

Iデータベースを削除してデータベースを再作成しようとしましたが、データベースは再作成されました(以前の移行まで)が、その後Add-Migratio nまだ「更新できません」というエラーが表示されます。

編集

私は、-forceパラメーターを試みたが、違いはありませんと。私のコンフィギュレーションクラスの

内容は(私は、以前の移行後は何も変更していない):

public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
    } 

    protected override void Seed(Bekosense.DAL.Context.BekosenseContext context) 
    {   
     context.Database.ExecuteSqlCommand(Properties.Resources.TriggerAlertMessageDrop); 
     context.Database.ExecuteSqlCommand(Properties.Resources.TriggerAlertMessageCreate); 
     context.Database.ExecuteSqlCommand(Properties.Resources.TriggerAlertMessageSentDrop); 
     context.Database.ExecuteSqlCommand(Properties.Resources.TriggerAlertMessageSentCreate); 
     context.Database.ExecuteSqlCommand(Properties.Resources.AddDbUsers); 
    } 

編集2 私は私がコメントするアドオンの移行を行うことができるだということが分かりました私のDbContextで出て、次の行:私はアクティブ上記の行を残して、設定ファイル内のすべてをコメントアウトするとき

//Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Configuration>()); 

、それはまだ動作しません。 Database.SetInitializer行がこの奇妙な動作を引き起こすのはなぜですか?私はこの行を、過去の問題(!ダウンのデータベースを移行する際に、最初からそれを行うための正しい方法を使用)

を与えた

+1

を、あなたは、移行のためのあなたの設定ファイルを投稿してくださいことはできますか? – IronMan84

+0

-forceパラメータを試しましたか? –

+0

私は同じ問題を抱えていましたが、swapneelの答えは私のために働いていましたが、これは少し極端です。幸いにも私は最初の段階にありますので、それほど大きな取引ではありませんでした –

答えて

4

automigrationsは絶対に使用しないでくださいは、あなたのglobal.asaxにする必要があります:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Configuration>()); 

あなたのDbContextではなく!上記は助けない場合

その他のヒント:

はおそらく、あなたはあなたのアプリケーション内で複数の層を持っている:

Add-Migration 000 -StartupProjectName "NameOfTheProjectInSolutionExplorer" -ConfigurationTypeName "MyConfiguration" -ConnectionString "theconnectionstring;" -ConnectionProviderName "System.Data.SqlClient" -Verbose 

上記は、私は、多層アプリケーションで使用するアドインの移行コマンドです。

あなたは[しかし、それは、それはデフォルトの状態への移行をもたらす気に保つ]あなたの問題を解決するために、エンティティフレームワークをリセットすることができますデータベース

Update-Database -ConfigurationTypeName "SlaveConfiguration" -StartupProjectName "FacturatieMVCv2.Data" -Verbose -script 
22

の更新のために同じこと

注:次の操作を実行する前にバックアップを取る

[App_Dataにフォルダの下]
  • データベース内__MigrationHistoryテーブルを削除します
  • プロジェクトに移行フォルダを削除(システムテーブル下にあってもよい)

あなたは、データベース内の__MigrationHistoryテーブルがあります

そして、パッケージマネージャコンソールで次のコマンドを実行します。

Enable-Migrations -EnableAutomaticMigrations -Force 

持つか-EnableAutomaticMigrationsなし使用し、最終的には、次のコマンドを実行します。私の場合は

Add-Migration Initial 

This may also help you

+1

この関連する回答は参考になります:http://stackoverflow.com/a/17798015/97964 2度目の移行が必要な場合や、 'Initial'マイグレーションで生成されたコードです。ここで重要な点は、最初の移行でDBのメタデータを順番に取得してそこから取得することです。 – jocull

+1

それは答えるべきです。 – Erdogan

4

を、私はクラスのDbContextにObjectContext.CommandTimeout強制されたので、私は同じエラーを持っています移行時のコンストラクタメソッドで。

これは私のために働い

((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 5000; 
+0

それは変だけど、これも私に起こっていた。 – bithavoc

+0

あなたは私の一日を救った – user449689

4

それを削除してください:

update-database -targetmigration:"0" -force -verbose 
add-migration Initial 
update-database 
+1

私は明らかにソリューションを理解するためにEFの新しい方法です。これは「Add-Migration」の使用を提案した2番目の記事ですが、どこに入力すればいいですか? – Jonathan

+1

Visual Studioの「パッケージマネージャコンソール」で行います。コマンドのリストをご覧ください:https://coding.abel.nu/2012/03/ef-migrations-command-reference/ – Robert

関連する問題