c# - データベースファースト - entity framework 自動マイグレーション 無効




エンティティフレームワーク、自動適用移行 (2)

自動移行とは、モデルの変更に対してadd-migrationコマンドを実行add-migration必要がないということですが、 update-databaseコマンドを手動で実行update-database必要があります。

update-database呼び出し時に自動移行が有効になっている場合、モデルに保留中の変更があると、「自動」移行が追加され、データベースが更新されます。

update-databaseコマンドを呼び出さずにデータベースを更新したい場合は、次のようにコンテキストのOnModelCreating()メソッドにDatabase.SetInitializer(...)追加します。

public class MyContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, MigrateDBConfiguration>());
    }

    ...
}

public class MigrateDBConfiguration : System.Data.Entity.Migrations.DbMigrationsConfiguration<MyContext>
{
    ...

デフォルトのDbContextではなく、実際のコンテキストをMigrateDatabaseToLatestVersionしてDbMigrationsConfigurationおよびMigrateDatabaseToLatestVersionを宣言するDbMigrationsConfigurationあります。

最初にEntity Frameworkのコードを使用し、次のコードでAutomaticMigrationsEnabledをtrueに設定します。

Database.SetInitializer(new MigrateDatabaseToLatestVersion<DbContext, MigrateDBConfiguration>());
//////////////////////////////////

public class MigrateDBConfiguration : System.Data.Entity.Migrations.DbMigrationsConfiguration<DbContext>
{
    public MigrateDBConfiguration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }
}

最初にプロジェクトを実行するとうまくいき、データベースとテーブルを作成します。 モデルを変更してフィールドをいくつか削除するか、新しいフィールドを追加してAdd-Migrationを実行した後、Migrationクラスが生成されましたが、実行後にこの例外が発生しました。

タイプ 'System.InvalidOperationException'の例外がEntityFramework.dllで発生しましたが、ユーザーコードで処理されませんでした

追加情報: 'DBContext'コンテキストをサポートするモデルは、データベースが作成されてから変更されました。

編集:私が変更するarturo menchacaの答えのようにこのようにコーディングすることができます:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<DBContext, MigrateDBConfiguration<DBContext>>());

...

しかし、この例外はオキュアです:

データベースに 'MyTable'という名前のオブジェクトが既に存在します。

移行を適用したいです。


エンティティに変更がある場合は、最初にadd-migrationを実行して移行スクリプトを作成add-migration必要があります。

その後、あなたのGlobal.asax

このようなコードが必要です

        var configuration = new MyProject.Configuration();
        var migrator = new System.Data.Entity.Migrations.DbMigrator(configuration);            

        migrator.Update();

asp.netプロジェクトを実行するたびに、 update-database自動的に実行および実行update-databaseための新しい移行があるかどうかが確認されます。





ef-migrations