app.UseMigrationsEndPoint 在 .NET Core Web 应用程序启动中的作用 class

What app.UseMigrationsEndPoint does in .NET Core Web Application Startup class

我从 Visual Studio 创建了一个新的 .NET Core Web 应用程序,我在启动时得到了这段代码 class:

if (env.IsDevelopment())
{
    // ***
    app.UseMigrationsEndPoint();
    // ***
}

这行 app.UseMigrationsEndPoint() 实际上是做什么用的? The official docs 一点帮助都没有:

Processes requests to execute migrations operations. The middleware will listen for requests made to DefaultPath.

默认路径是什么?什么要POST来呢?它实际上会执行什么?它有任何可选参数吗?它是否受到某种保护?

您可能已经从链接的文档页面中看到,它来自 EF Core。可以在 GitHub.

上找到确切的代码 运行

它会检查所使用的数据库是否有任何待处理的迁移,并在需要时应用它们。就是这样。

这个app.UseMigrationsEndPoint()实际上是一个非常方便的开发工具。

随着我们的开发,我们将实体添加到数据库上下文中,或者修改我们拥有的实体。我们像往常一样 运行 dotnet ef migrations add <NameOfMigration> ,这将生成迁移文件。当 migrations add 命令成功时,我个人通常会 运行 dotnet ef database update。但是,使用 app.UseMigrationsEndPoint(),我不必手动 运行 dotnet ef database update.

因此,我们尝试构建并 运行 我们的应用程序正在开发中。浏览器加载了我们的应用程序,但是 database update 并没有像我们预期的那样发生。

但是,如果我们尝试访问一个页面或 API 调用需要访问尚未更新的 table,我们会得到一个特殊页面 - 而不是错误页面- 但列出所有尚未应用的迁移。

令人惊讶的是,有一个标记为“应用迁移”(或类似名称)的按钮。我们将单击它,然后我们的数据库将根据尚未应用的迁移进行更新。然后我们将重新加载页面,然后浏览器将按照我们的预期显示页面。我们可以检查 SQL Server Object Explorer 或其他工具中的 tables,我们将看到反映的那些迁移。