9

ビルドサーバーでデータベースを更新しようとしていますが、無効になっていても自動移行を実行しようとして失敗しています。データベースはすでに存在しており、最新の移行を適用するだけです。ここでは、EF:無効にすると自動移行が実行されます

public sealed class Configuration : DbMigrationsConfiguration<CableSenseInstanceConfiguratorContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
    } 
} 

は私が手動で作成した移行ファイルの束を持っている最新のものです:ここに私の状況です

public partial class Settings : DbMigration 
{ 
    public override void Up() 
    { 
     AddColumn("dbo.MasterInstances", "Settings", c => c.String()); 
    } 

    public override void Down() 
    { 
     DropColumn("dbo.MasterInstances", "Settings"); 
    } 
} 

私は、手動でパッケージマネージャコンソールからデータベースを更新した場合、私はそれが(表がすでに存在するため、失敗した)自動移行を実行しようと次を参照してください。

Applying code-based migrations: [201204200805145_NoMoreCerts, 201210311451543_SuperUsers, 201301041036414_Settings, 201301041128583_Settings2]. 
Applying code-based migration: 201204200805145_NoMoreCerts. 
Applying automatic migration: 201204200805145_NoMoreCerts_AutomaticMigration. 

マイ__MigrationHistoryテーブルがちょうど最初の作成のための1つのエントリがあります。自動移行を停止するにはどうすればよいですか?

答えて

5

がここjjslagaceから答えをチェックアウト:

Update-Database tries to do an automatic migration even with automatic migrations disabled

を手動であなたの移行を構築しています。私の推測では、エンティティ・フレームワークは、あなたのマイグレーション・スクリプトにはないものを追加したいと思っています。あるいは、列の名前を別々にしたいなどです。EFは脳を持ち、その脳はかなりシンプルです。 が流暢な(手動で作成/調整の移行ファイルではありません)を使用して別の方法で指示しない限り、状況は一定のものになると予想しています。上の質問の答えから、時にはあなたが見ている問題が発生するように聞こえます。

短いストーリーは、手動で移行ファイルを作成しないでください。代わりに、add-migrationsコマンドを実行します。これにより移行が作成され、データベースに適用される前にEFが期待していることがわかります(これは愚かなことがあるためです)。 EFが生成しているものをオーバーライドする必要がある場合は、OnModelCreatingをオーバーライドして、DBContextクラスに流暢なマッピングを追加します。次に、-forceオプションを指定してadd-migrationを再度実行します。 Here is a good reference for using the Fluent APIは、EFマッピングを簡略化します。あなたがあなたが探している移行を得るまで洗うと、を次に更新データベースを実行します。

希望に役立ちます!

関連する問題