如果使用 SQL 服务器而不是内存中,如何仅进行 运行 迁移

How to Only Run Migrations if Using SQL Server and not In-Memory

我正在使用 Entity Framework 核心,使用 SQL 服务器进行迁移。我也在我的集成测试中使用内存中和 SQL-Lite 内存中数据库连接。

如何在使用 SQL 服务器连接时只进行 运行 迁移?我看不到基于 DbContext.

检测数据存储类型的方法

可以通过MigrationBuilder.ActiveProvider属性判断是否在迁移中执行Up方法:

protected override void Up(MigrationBuilder migrationBuilder)
{
    if (migrationBuilder.ActiveProvider == "Microsoft.EntityFrameworkCore.SqlServer")
    {
        CreateTable(....
    }
}

https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/providers#one-migration-set

这里有一个选项...

if (db.GetService<IDatabaseProviderServices>()
    .InvariantName == "Microsoft.EntityFrameworkCore.SqlServer")
{
    db.Database.Migrate();
}

EntityFramework Core 内置了依赖注入。您可以通过将其作为服务获取来检查数据库提供程序,如下所示:

if (dbContext.GetService<IDatabaseProviderServices>() is SqlServerDatabaseProviderServices)
{
    await dbContext.Database.MigrateAsync();
}