执行EF迁移命令后文件未生成在DbContext目录,为何需手动指定输出路径?
为什么EF Core迁移文件默认生成在Migrations根目录而非DbContext所在子目录?
这个问题我当初分层存放DbContext时也踩过同款坑!EF Core的默认行为确实不会自动关联DbContext的物理存放目录来决定迁移文件的输出位置,背后是它的设计逻辑:
EF Core把迁移文件看作整个项目的数据库变更版本记录,默认会统一放在项目根目录下的
Migrations文件夹里——不管你的DbContext在项目的哪个子目录,它都不会自动把迁移路径和DbContext的文件路径绑定,两者在默认配置下是完全独立的。你用到的
--output-dir是临时指定单次迁移的输出路径,但如果想让后续所有迁移都默认输出到migrations\application目录,其实可以通过配置DbContext来实现,不用每次都加参数:方法一:在DbContext的
OnConfiguring方法里指定迁移目录protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { optionsBuilder.UseSqlServer("你的数据库连接字符串") // 显式指定迁移文件的输出目录 .MigrationsDirectory(@"Migrations\Application"); } }方法二:在Program.cs(或Startup.cs)注册DbContext时配置
builder.Services.AddDbContext<AppDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")) .MigrationsDirectory(@"Migrations\Application"));
配置完成后,再执行dotnet ef migrations add init -c AppDbContext,迁移文件就会自动生成到migrations\application目录下了。
简单总结:默认生成到根目录是EF Core的设计默认值,不属于异常行为。如果想要迁移路径和DbContext所在目录对齐,必须显式配置迁移输出路径,或者每次用--output-dir临时指定。
内容的提问来源于stack exchange,提问作者HelloWorld
相关产品推荐
相关产品推荐

