当我运行项目时,EF Core 迁移会自动运行吗?

问题描述 投票:0回答:3

我创建了一个简单的 Web API 项目来测试 EF 迁移。我在程序包管理器控制台中调用了 Add-Migration Initial,并创建了初始迁移和文件夹。现在我运行我的项目,我期望它自动创建数据库。但事实并非如此,它会引发登录错误。

我已调用 Update-Database 并创建了数据库。

它不应该在访问上下文时自动创建数据库吗?当我添加新的迁移文件时会怎样?当它看到快照与数据库不同时,它会在运行时自动更新我的数据库吗(或者它是否使用迁移表)?

总而言之,问题是:

  1. EF Core 迁移可以在应用程序运行时自动创建数据库吗?

  2. 当 EF Core 迁移检测到存在差异时,是否可以在应用程序运行时自动更新数据库?

  3. 它用什么来比较差异?实际的数据库结构和快照?

  4. 如果自动更新,如果我手动删除迁移会怎样?数据库中的快照和迁移表会不同步,对吗?会发生什么?

  5. 如果无法在运行时自动创建/更新,如何向客户部署数据库和更改?

entity-framework asp.net-core entity-framework-migrations
3个回答
4
投票

您可以通过添加以下内容在

Startup.cs
中自动运行迁移:

var dbFactory = new DataContextFactory();
var dbContext = dbFactory.Create(new DbContextFactoryOptions());
dbContext.Database.Migrate();

DataContextFactory
是实现
IDbContextFactory<DataContext>
的工厂。


1
投票

EF core 不支持

Automatic Migrations
。所以你必须手动完成。

从自动迁移作为一项功能的角度来看,我们不是 计划在 EF Core 中实现它,因为经验表明代码库 迁移成为一种更易于管理的方法。

您可以在这里阅读全文:不实施自动迁移

您可以使用 .NET Core CLI 来了解如何执行此操作

了解如何使用 包管理器控制台 (Visual Studio)


0
投票

.Net6 或更高版本

我使用以下代码,它对我来说效果很好


using (var scope = builder.Services.BuildServiceProvider().CreateScope())
{
    using(var dbContext = scope.ServiceProvider.GetRequiredService<YourDbContext>())
    {
        if (dbContext.Database.GetPendingMigrations().Any())
        {
            dbContext.Database.Migrate();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.