3

最近、コード ファースト バックエンド (SQL CE 4.0 データベース) を使用して WPF アプリケーションを作成しました。このアプリケーションは現在公開されており、技術者以外の人々によって使用されています。

いくつかの変更を行ったので、変更を反映するために移行を追加する必要があります。これは正常に完了しました。コマンドを使用するだけで、これをローカル マシンで正常に動作させることができますUpdate-Database

アップデートを展開するとき、これはどのように機能しますか? 顧客のデータベースがどのように移行されるのかわかりません。開発マシンではないマシンで実行すると、次のエラーが発生します。

保留中の変更があり、自動移行が無効になっているため、現在のモデルに一致するようにデータベースを更新できません。保留中のモデルの変更をコードベースの移行に書き込むか、自動移行を有効にします。自動移行を有効にするには、DbMigrationsConfiguration.AutomaticMigrationsEnabled を true に設定します。

Ps 私は絶対に自動移行を有効にしたくありません ;)

アップデート - -

これが私の初期化子です。

Database.SetInitializer(new Initializer());

これが私の実際の初期化子です。

public class Initializer : MigrateDatabaseToLatestVersion<Context, Configuration>
{
}

そして、これが私の Configuration クラスのコンストラクターです。

public Configuration()
{
    AutomaticMigrationsEnabled = false;

    DbMigrator migrator = new DbMigrator(this);

    if (migrator.GetPendingMigrations().Any())
    {
        _pendingMigrations = true;
        migrator.Update();
    }
}
4

1 に答える 1

4

初期化子がありません:

Database.SetInitializer(
  new MigrateDatabaseToLatestVersion<YourContext, YourMigrationsConfiguration>());

これにより、アプリケーションの起動時に顧客データベースが強制的にアップグレードされます。

移行プロセスをより詳細に制御できる別のオプションは、手動で強制することです。

    YourMigrationsConfiguration cfg = new YourMigrationsConfiguration(); 
    cfg.TargetDatabase = 
       new DbConnectionInfo( 
          theConnectionString, 
          "provider" );

    DbMigrator dbMigrator = new DbMigrator( cfg );
    dbMigrator.Update();             
于 2013-07-27T19:27:36.550 に答える