在应用所有 EF Core 迁移后运行代码

     2023-03-29     11

关键词:

【中文标题】在应用所有 EF Core 迁移后运行代码【英文标题】:Run code after all EF Core migrations are applied 【发布时间】:2022-01-15 15:06:43 【问题描述】:

EF Core 5 有各种events,但它们与DbContext 相关。没有与迁移相关的事件 (Migration)。

我想在应用所有迁移后运行自定义代码 - 无论是由代码 (context.Database.Migrate()) 还是 CLI (dotnet ef database update) 触发。

解决方法是添加一个“空”迁移,并将我的代码放在它的Up 方法中。但每次添加迁移时我都需要这样做。

假设没有可以使用的事件或钩子(有吗?),在应用所有迁移后如何运行自定义代码?

【问题讨论】:

【参考方案1】:

这里有一个解决方法。

[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);
  

有两个“最后”迁移:

他们的 ID 被选中,所以他们最后运行(“99999999999999”) 都调用自定义代码,必须是幂等的 从历史表中删除另一个 他们使用Task.Run 进行异步而不是同步

在每次运行期间,一个或另一个运行自定义代码,并从历史记录表中删除另一个。在下一次运行中会发生相反的情况。

相同的双重设置可用于预迁移挂钩。

repo 上有一个未完成的待办事项。

【讨论】:

如何使用 EF Core 在 ASP.NET Core 中取消应用迁移

】如何使用EFCore在ASP.NETCore中取消应用迁移【英文标题】:HowtounapplyamigrationinASP.NETCorewithEFCore【发布时间】:2016-11-0615:25:03【问题描述】:当我在VS2015中使用EFCore的ASP.NETCore项目运行PM>Remove-Migration-contextBloggingContext时,我收... 查看详情

我可以避免在 EF Core 中使用迁移吗?

...它从MSSQL数据库中获取数据。使用Scaffold命令后,我拥有所有模型和适当的数据库上下文,并使用fluentApi我定义了表之间的一些关系(键设置,一对多关系)。SQLserver里没有这个东西,我不想影响 查看详情

如何在启用了 EF Core 迁移的 Azure 中运行蓝绿色部署

】如何在启用了EFCore迁移的Azure中运行蓝绿色部署【英文标题】:HowdoIrunabluegreendeploymentinAzurewithEFCoreMigrationsenabled【发布时间】:2020-02-2417:45:09【问题描述】:我想运行蓝绿色部署;但是,EFMigrations似乎阻止了这一点。如果我将... 查看详情

从 EF Core 5 迁移到 EF Core 6 时出错

...在创建上下文时出现错误:字典中不存在给定的键。示例应用程序仓库:https://github.com/testApp6/TestApp有什么想法有什么问题或我该如何解决?【问题讨论】 查看详情

EF Core 迁移从其他上下文添加表

...entityUser表(AppUser)之间创建1..1关系。当我运行迁移时,所有表都是从AppUser模式(用户)内的 查看详情

EF Core 添加迁移构建失败

】EFCore添加迁移构建失败【英文标题】:EFCoreadd-migrationBuildFailed【发布时间】:2017-11-3019:37:42【问题描述】:我有一个开发人员收到“构建失败”。在.NETCoreEF项目中运行add-migration时,没有解释构建失败的原因。您如何解决此错... 查看详情

如何使用 Docker 在 SQL Server 数据库上运行 EF Core 迁移?

】如何使用Docker在SQLServer数据库上运行EFCore迁移?【英文标题】:HowtorunEFCoremigrationsonSQLServerdatabaseusingDocker?【发布时间】:2019-04-1112:23:58【问题描述】:在Mac上,我有一个带有一些实体框架迁移的NetCore2.1类库。我需要使用Docker... 查看详情

将所有环境迁移到最新版本后,是不是有理由保留 EF 迁移代码?

】将所有环境迁移到最新版本后,是不是有理由保留EF迁移代码?【英文标题】:AretherereasonstokeepEFmigrationcodearoundonceallenvironmentshavebeenmigratedtothelatestversion?将所有环境迁移到最新版本后,是否有理由保留EF迁移代码?【发布时间... 查看详情

EF Core - 代码优先迁移:关键字“NOT”附近的语法不正确

...时出现此错误:尝试恢复到以前的迁移,但表示没有迁移应用为最新的数据库。删除了数据库表并重 查看详情

EF 自动迁移向后兼容

】EF自动迁移向后兼容【英文标题】:EFautomaticmigrationsbackwardscompatible【发布时间】:2016-10-1121:03:49【问题描述】:我有一个在Azure上运行的EF6.13+MVC5网站,我正在尝试使用Azure的部署槽,它基本上总是有2个(或更多)站点在运行... 查看详情

数据库更新后是不是可以删除 EF Core 数据库迁移

】数据库更新后是不是可以删除EFCore数据库迁移【英文标题】:IsitpossibletoremoveanEFCoreDatabasemigrationafterthedatabaseisupdatedwiththesame数据库更新后是否可以删除EFCore数据库迁移【发布时间】:2021-09-1618:25:14【问题描述】:在.NETEF核心中... 查看详情

用于 ASP.NET Core 应用程序的 EF Code First 迁移替代方案

】用于ASP.NETCore应用程序的EFCodeFirst迁移替代方案【英文标题】:EFCodeFirstmigrationsalternativeforASP.NETCoreapplication【发布时间】:2017-04-0515:23:08【问题描述】:我有一个与ASP.NETCore的数据库迁移框架有关的问题。所以我们有漂亮的实体... 查看详情

迁移到 .net core 3.1 后 EF OrderBy 出现问题

】迁移到.netcore3.1后EFOrderBy出现问题【英文标题】:ProblemwithEFOrderByaftermigrationto.netcore3.1【发布时间】:2019-12-1517:26:28【问题描述】:考虑这段代码:_dbContext.Messages.GroupBy(m=>newMinId=m.SenderId<=m.RecipientId?m.SenderId:m.RecipientId,M 查看详情

持续部署的 EF Core Code First 运行时迁移回滚策略

】持续部署的EFCoreCodeFirst运行时迁移回滚策略【英文标题】:EFCoreCodeFirstRuntimeMigrationRollbackStrategywithContinuousDeployment【发布时间】:2020-06-1917:45:04【问题描述】:我有一个在启动时使用EFCore运行时迁移的服务:varmigrator=dbContext.Dat... 查看详情

EF Core 迁移

...时间】:2021-11-2311:41:59【问题描述】:我有一个工作的Web应用程序(一个端点),其中包含一些方法并连接到sqlserver中的两个表。这个应用程序完全是我自己在一个ashx文件中从头开始实现的,不遵循任何新旧架构,只是ashx文件... 查看详情

我可以将依赖项注入迁移(使用 EF-Core 代码优先迁移)吗?

】我可以将依赖项注入迁移(使用EF-Core代码优先迁移)吗?【英文标题】:CanIinjectdependencyintomigration(usingEF-Corecode-firstmigrations)?【发布时间】:2017-07-2710:08:18【问题描述】:我尝试将IConfiguration注入到迁移中(在构造函数中),... 查看详情

EF Core ASP.Net Core 编辑迁移

】EFCoreASP.NetCore编辑迁移【英文标题】:EFCoreASP.NetCoreeditmigration【发布时间】:2021-11-2201:27:42【问题描述】:如果我需要更改数据库迁移,我应该将其添加到列表中的现有迁移中还是我需要更改设计器中的数据?保存数据并准备... 查看详情

从 .NET Core 2.2 迁移到 3.1 后,EF Core 随机抓取 API 请求上的用户表

】从.NETCore2.2迁移到3.1后,EFCore随机抓取API请求上的用户表【英文标题】:EFCorerandomlycrawlsusertablesonAPIrequestsaftermigratingfrom.NETCore2.2to3.1【发布时间】:2021-12-3003:42:02【问题描述】:从.NETCore2.2迁移到3.1后,EFCore会随机开始爬取用户... 查看详情