9

ビルド サーバーでデータベースを更新しようとしていますが、無効になっているにもかかわらず、自動移行を実行しようとして失敗しています。データベースは既に存在し、最新の移行を適用するだけです。これが私のコンテキストです:

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 つだけあります。自動移行を停止するにはどうすればよいですか?

4

1 に答える 1

7

ここで jjslagace からの回答を確認してください。

Update-Database は、自動移行が無効になっていても自動移行を試みます

移行を手動で構築しています。私の推測では、エンティティ フレームワークは、移行スクリプトにないものを追加したい、または列に別の名前を付けたいなどです。EF には頭脳があり、その頭脳はかなり単純です。(移行ファイルを手動で作成/微調整するのではなく)流暢に使用して別の方法で指示しない限り、物事が特定の方法であると期待しています。上記の質問に対する回答から、あなたが見ている問題が発生する場合があるように思えます。

簡単に言えば、移行ファイルを手動で作成しないでください。代わりに add-migrations コマンドを実行してください。これにより、移行が作成され、データベースに適用される前に EF が何を期待しているかを確認できます (愚かな場合があるため)。EF が生成するものをオーバーライドする必要がある場合は、OnModelCreating をオーバーライドして、DBContext クラスに流暢なマッピングを追加します。次に、-force オプションを指定して add-migration を再度実行します。 これは、Fluent APIを使用して EF マッピングをカスタマイズするための優れたリファレンスです。探している移行が得られるまで、すすぎと繰り返しを行ってから、 update-databaseを実行します。

それが役立つことを願っています!

于 2013-01-07T12:59:15.860 に答える