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

Mir*_*vec 9 c# entity-framework-core asp.net-core asp.net-core-5.0

我从 Visual Studio 创建了一个新的 .NET Core Web 应用程序,并在启动类中生成了这段代码:

if (env.IsDevelopment())
{
    // ***
    app.UseMigrationsEndPoint();
    // ***
}
Run Code Online (Sandbox Code Playgroud)

这条线到底是做什么的app.UseMigrationsEndPoint()官方文档根本没有帮助:

处理执行迁移操作的请求。中间件将侦听对 DefaultPath 的请求。

默认路径是什么?发布什么?它实际上会执行什么?它有任何可选参数吗?它以某种方式受到保护吗?

Mic*_*uso 44

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

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

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

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

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

  • 这是一个比公认的答案更好的答案 (4认同)

Oli*_*ver 9

正如您可能已经从链接的文档页面看到的那样,它来自 EF Core。可以在GitHub 上找到将要运行的确切代码。

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