实体框架迁移:获取数据库版本作为字符串

本文关键字:版本 字符串 数据库 获取 框架 迁移 实体 | 更新日期: 2023-09-27 18:15:54

我正在使用EF5的web应用程序工作。我想在管理页面上显示数据库版本(即迁移的名称)…这样,如果站点被部署到我没有数据库管理员权限的环境中,如果我需要生成升级脚本,我仍然可以登录到后端来查找版本。是否有一个属性,例如DBContext,我可以用它来获取这个信息?

实体框架迁移:获取数据库版本作为字符串

实体框架将创建迁移历史表来管理数据库版本。

迁移历史表是Code First Migrations使用的一个表存储应用于数据库的迁移的详细信息。默认情况下数据库中表的名称是__MigrationHistory,它是在对数据库应用第一次迁移时创建的。源

可以使用MigrationId列作为数据库版本。列的值看起来像201408011306353_InitialCreate。只需按前15个字符降序获取最后一行的顺序。

using (var context = new AppContext())
{
    var query = "select top 1 MigrationId from __MigrationHistory order by LEFT(MigrationId, 15) desc";
    var migrationId = context.Database.SqlQuery<string>(query).FirstOrDefault();
}

实体框架核心提供:

context.Database.GetMigrations ()

获取在已配置的迁移程序集中定义的所有迁移。

context.Database.GetAppliedMigrations ()

获取已应用于目标数据库的所有迁移。

看到https://learn.microsoft.com/en us/dotnet/api/microsoft.entityframeworkcore.infrastructure.databasefacade?view=efcore - 2.0

例子
// _context = instance of MyDbContext from ctor
var lastAppliedMigration = _context.Database.GetAppliedMigrations().LastOrDefault();
var lastDefinedMigration = _context.Database.GetMigrations().LastOrDefault();
Console.WriteLine($"Last applied migration id: {lastAppliedMigration}");
Console.WriteLine(lastAppliedMigration == lastDefinedMigration
    ? "Database is up to date."
    : $"There are outstanding migrations. Last defined migration is: {lastDefinedMigration}");

获取最后一个migrationId在Ef Core

_context.Database.GetMigrations().Last()