移行を作成して有効にしたプロジェクトがあります。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);
}
}