.NET6中Database.Migrate()无法自动执行迁移的问题
解决.NET6自动迁移无法识别未执行迁移的问题
针对你遇到的问题,核心原因是Api项目无法定位到Infrastructure层中的迁移文件,以下是具体的解决步骤:
1. 注册DbContext时指定迁移程序集
在Api项目的Program.cs中注册ApiDbContext时,明确指定迁移所在的程序集(即你的Infrastructure项目名称),示例代码:
builder.Services.AddDbContext<ApiDbContext>(options => { options.UseSqlServer( builder.Configuration.GetConnectionString("DefaultConnection"), b => b.MigrationsAssembly("Infrastructure") // 替换为你的Infrastructure项目名称 ); });
2. 确保迁移文件被复制到输出目录
进入Infrastructure项目的Migrations文件夹,选中所有迁移文件(包括*Designer.cs和Snapshot.cs),在属性窗口中设置:
- 复制到输出目录:选择「如果较新则复制」
- 生成操作:选择「内容」
3. 验证DbContext的迁移程序集配置
如果你的ApiDbContext在OnConfiguring方法中配置了数据库连接,也需要在这里指定迁移程序集,示例:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( "YourConnectionString", b => b.MigrationsAssembly("Infrastructure") ); }
4. 检查迁移文件的命名空间
确保所有迁移文件的命名空间与Infrastructure项目的命名空间一致(默认应为Infrastructure.Migrations),如果不一致,要么修改命名空间,要么在指定MigrationsAssembly时使用正确的程序集名称。
完成以上步骤后,重新运行Api项目,GetPendingMigrations()应该能正确识别到未执行的迁移,Migrate()也会自动执行这些迁移。
内容的提问来源于stack exchange,提问作者Meldrel
相关产品推荐
相关产品推荐

