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



我使用实体框架核心使用SQL Server与迁移。我还在集成测试中使用in - memory和SQL-Lite in - memory数据库连接。

如何在使用SQL Server连接时才运行迁移?

我看不到一种方法来检测基于DbContext的数据存储类型。

您可以使用MigrationBuilder.ActiveProvider属性来决定是否在迁移中执行Up方法:

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

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

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

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

这里有一个选项…

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

最新更新