Entity framework 实体框架迁移失败时如何运行自定义代码?

Entity framework 实体框架迁移失败时如何运行自定义代码?,entity-framework,database-migration,entity-framework-migrations,Entity Framework,Database Migration,Entity Framework Migrations,我需要将一些数据从数据库移动到web服务。因此,我需要在迁移期间调用web服务,并在删除包含表之前上载现有数据。如果数据上传失败,则不能删除该表。此外,我还想从服务中删除数据,以防在迁移的其他步骤中发生异常 如果我将web服务调用放在Up方法中,则会在迁移之前调用web服务,如果服务调用抛出,迁移将不会运行。但是,我看不出可以将回滚代码放在哪里。Up方法中的语句只将要执行的操作排队,不执行任何数据库检查,因此在那里添加一个catch不会有帮助 我现在看到的唯一可能的解决方案是创建自己的迁移运行程

我需要将一些数据从数据库移动到web服务。因此,我需要在迁移期间调用web服务,并在删除包含表之前上载现有数据。如果数据上传失败,则不能删除该表。此外,我还想从服务中删除数据,以防在迁移的其他步骤中发生异常

如果我将web服务调用放在
Up
方法中,则会在迁移之前调用web服务,如果服务调用抛出,迁移将不会运行。但是,我看不出可以将回滚代码放在哪里。
Up
方法中的语句只将要执行的操作排队,不执行任何数据库检查,因此在那里添加一个
catch
不会有帮助

我现在看到的唯一可能的解决方案是创建自己的迁移运行程序,而不是使用
migrate.exe
逐个运行迁移:

var migrator = new DbMigrator(new MyMigrationConfiguration());
var pendingMigrations = migrator.GetPendingMigrations();
foreach (var migration in pendingMigrations)
{
    try
    {
        migrator.Update(migration);
    }
    catch (SqlException)
    {
        if (migration == "MoveDataToWebService")
        {
            // Delete data from service
        }

        throw;
    }
}

是否有任何内置的方法来处理迁移失败,以便我可以从Visual Studio或
migrate.exe
运行迁移?或者可能我对原始任务的处理方法是错误的,我应该使用EF迁移以外的方法来移动数据?

您使用Package Manager控制台吗?您可以这样做:为什么不将其分为多个步骤?不必在迁移中删除表,只需重命名它,然后执行web服务同步,然后在将来删除具有新迁移的表,当您确定数据良好时,是否使用Package Manager控制台?您可以这样做:为什么不将其分为多个步骤?不要在迁移中删除表,只需重命名它,然后执行web服务同步,然后在将来确定数据良好时,使用新迁移删除表