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