use*_*153 8 c# asp.net-mvc entity-framework
我正在使用EF5开发一个Web应用程序.我想在管理页面上显示数据库版本(即迁移的名称)......这样,如果站点部署到我没有数据库管理员权限的环境,我仍然可以登录如果我需要生成升级脚本,后端找到版本.是否有我可以用来获取此信息的DBContext属性?
Yul*_*dra 13
实体框架将创建迁移历史表以管理数据库版本.
迁移历史记录表是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();
}
Run Code Online (Sandbox Code Playgroud)
Chr*_*jen 10
实体框架核心提供:
context.Database.GetMigrations()
获取已配置的迁移程序集中定义的所有迁移.
context.Database.GetAppliedMigrations()
获取已应用于目标数据库的所有迁移.
例
// _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}");
Run Code Online (Sandbox Code Playgroud)