【发布时间】:2021-12-15 02:23:38
【问题描述】:
在我的 Startup.cs 中,我执行这样的迁移。我无法解释的私有方法中有一些奇怪的问题,它似乎与调用的异步版本有关。以下内容按预期工作(尽管异步性毫无意义。
public async void Configure(
IApplicationBuilder app, IWebHostEnvironment env)
{
...
await MigrateDb(app);
...
}
private static async Task MigrateDb(IApplicationBuilder app)
{
using IServiceScope scope = app.ApplicationServices
.GetService<IServiceScopeFactory>()?.CreateScope();
if (scope == null)
throw new OperationCanceledException();
Context context = scope.ServiceProvider.GetRequiredService<Context>();
context.Database.Migrate();
}
但是,当我应用异步迁移时,东西停止工作。出于某种原因,控制器无法访问,我在每个端点上都得到了 404,包括 ping,它只从服务返回一个固定的字符串,而不与数据库有任何联系。
private static async Task MigrateDb(IApplicationBuilder app)
{
using ...
Context context = ...
await context.Database.MigrateAsync();
}
谷歌搜索绝对没有提供任何相关信息。我尝试通过scope.Dispose(); 明确杀死范围。目前我不知道谷歌更多信息或如何解决故障。这不是一个关键的生产问题——我只是在做一个测试(这部分不是它的目的)。不过,理解为什么会发生这种情况会很有趣。
【问题讨论】:
标签: c# entity-framework asynchronous database-migration asp.net-core-5.0