lon*_*nix 7 .net c# entity-framework entity-framework-core entity-framework-migrations
EF Core 5 有各种事件,但它们都与DbContext. 没有与迁移相关的事件 ( Migration)。
我想在应用所有迁移后运行自定义代码 - 无论是由代码 ( context.Database.Migrate()) 还是 CLI ( dotnet ef database update) 触发。
解决方法是添加一个“空”迁移,并将我的代码放入其Up方法中。但每次添加迁移时我都需要这样做。
假设没有我可以使用的事件或挂钩(有吗?),在应用所有迁移后如何运行自定义代码?
这是一个解决方法。
[DbContext(typeof(MyContext))]
[Migration("99999999999999_Last1")]
public class Last1 : Migration {
protected override void Up(MigrationBuilder migrationBuilder) {
Task.Run(() => callPostMigrationCodeThatIsIdempotent()).GetAwaiter().GetResult();
migrationBuilder.DeleteData(HistoryRepository.DefaultTableName, nameof(HistoryRow.MigrationId), "string", "99999999999999_Last2", null);
}
}
[DbContext(typeof(MyContext))]
[Migration("99999999999999_Last2")]
public class Last2 : Migration {
protected override void Up(MigrationBuilder migrationBuilder) {
Task.Run(() => callPostMigrationCodeThatIsIdempotent()).GetAwaiter().GetResult();
migrationBuilder.DeleteData(HistoryRepository.DefaultTableName, nameof(HistoryRow.MigrationId), "string", "99999999999999_Last1", null);
}
}
Run Code Online (Sandbox Code Playgroud)
有两个“最后”迁移:
Task.Run异步优于同步在每次运行期间,其中一个运行自定义代码,并从历史表中删除另一个。在下一次运行中,将会发生相反的情况。
相同的双重设置可用于预迁移挂钩。
存储库上有一个未完成的积压项目。
| 归档时间: |
|
| 查看次数: |
1491 次 |
| 最近记录: |