0

移行を作成して有効にしたプロジェクトがあります。4.3で作成したので最新だと思います。更新を実行するコンテキストのコンストラクターにいくつかのコードがあり (以下のコードを参照)、null 許容文字列列のようなものを追加するか、一貫性のない方法でデータベースを変更しない何かを行うたびに動作するようです。私のシナリオは、モデルを変更することです。SQL トレースを監視すると、列が自動的に変更されます。

私の質問は、「up」および「down」メソッドを実行したいのですが、実行時に混乱しています。つまり、私は現在バージョン 1 を使用しており、「up」メソッドにコードを追加して列を追加し、後でバージョン 3 に移行するときに、どの「up」メソッドを呼び出すかをどのように知るのでしょうか?

混乱している。-ピーター

namespace MigrationsAutomaticDemo.Migrations
{
using System.Data.Entity.Migrations;

public partial class AddBlogRating : DbMigration
{
    public override void Up()
    {
        AddColumn("Blogs", "Rating", c => c.Int(nullable: false, defaultValue: 3));
    }

    public override void Down()
    {
        DropColumn("Blogs", "Rating");
    }
}
}

    public SiteDB()
    {
        UpdateDatabase();
    }

    // http://joshmouch.wordpress.com/2012/04/22/entity-framework-code-first-migrations-executing-migrations-using-code-not-powershell-commands/
    public static int IsMigrating = 0;
    private static void UpdateDatabase()
    {
        if (0 == Interlocked.Exchange(ref IsMigrating, 1))
        {
            // Manually creating configuration: 
            var migratorConfig = new DbMigrationsConfiguration<SiteDB>(); 
            migratorConfig.AutomaticMigrationsEnabled = true;

            // Using configuration defined in project: 
            //var migratorConfig = new DbMigrationsConfiguration();

            // 3 
            //var dbMigrator = new DbMigrator(new Settings()); 
            var dbMigrator = new DbMigrator(migratorConfig);
            dbMigrator.Update();

            Interlocked.Exchange(ref IsMigrating, 0);
        }
    }
4

1 に答える 1

0

移行構成で自動移行を有効にすると、移行先を指定する必要はありません。移行ツールは、現在のコンテキストとターゲット データベースのスナップショットに基づいて、変更を自動的にスキャフォールディングします。

var migratorConfig = new DbMigrationsConfiguration<SiteDB>();
migratorConfig.AutomaticMigrationsEnabled = true;

あなたの場合、特定の移行を使用してデータベースをアップグレードしたいと考えています。アップグレードする移行を明示的に指定するだけです。

Configuration configuration = new Configuration();
DbMigrator migrator = new DbMigrator(configuration);
migrator.Update("201204250656061_AddBlogRatingVersion2");
migrator.Update("201204250656061_AddBlogRatingVersion3");
migrator.Update("201204250656061_AddBlogRatingVersionX");
于 2012-04-25T07:02:42.033 に答える