如何在控制台中显示EF Core的__EFMigrationsHistory迁移历史?
解决EF Core调用
Migrate()时显示迁移历史信息的问题 要让程序调用ctxMain.Database.Migrate()时在控制台输出迁移历史,核心是为EF Core配置日志输出到控制台——命令行执行dotnet ef database update时默认开启了日志,而自定义程序需要手动配置。
方法一:在上下文的OnConfiguring中配置日志
修改你的MainContext类,在OnConfiguring方法里添加日志配置:
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; public class MainContext : DbContext { // 你的DbSet及其他实体配置 protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .UseSqlServer("你的数据库连接字符串") // 替换为实际连接串 // 输出EF Core信息级日志到控制台,包含迁移相关内容 .LogTo(Console.WriteLine, LogLevel.Information) // 可选:仅过滤迁移相关日志事件,减少冗余输出 .LogTo(Console.WriteLine, new[] { RelationalEventId.MigrationApplied, RelationalEventId.MigrationSkipped, RelationalEventId.MigrationStarting }); } }
方法二:通过依赖注入配置(适用于ASP.NET Core或使用DI的控制台程序)
如果你的程序使用依赖注入(比如.NET 6+的控制台/ASP.NET Core项目),在服务配置阶段为DbContext添加日志:
// Program.cs 顶级语句示例 using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; var builder = Host.CreateDefaultBuilder(args); builder.ConfigureServices(services => { services.AddDbContext<MainContext>(options => options.UseSqlServer("你的数据库连接字符串") .LogTo(Console.WriteLine, LogLevel.Information)); }); var host = builder.Build(); // 获取上下文并执行迁移 using var scope = host.Services.CreateScope(); var ctxMain = scope.ServiceProvider.GetRequiredService<MainContext>(); Console.WriteLine("---> Creating database..."); ctxMain.Database.Migrate(); Console.WriteLine("---> Done creating database!");
效果说明
配置完成后,再次运行程序调用Migrate(),控制台会输出类似命令行工具的迁移日志,例如:
Applying migration '20240520123456_InitialCreate'.
Done.
内容的提问来源于stack exchange,提问作者ana mariatonia
相关产品推荐
相关产品推荐

