ASP.NET Core Web API中通过DbContext更改迁移程序集报错求助
ASP.NET Core EF Core 迁移程序集不匹配问题解决
我在学习ASP.NET Core Web API,开发电影CRUD项目时,将DbContext及数据操作逻辑放在类库MovieManagementLibrary中,主项目MovieAPI通过依赖注入引用该类库。执行Entity Framework Core数据迁移时,出现如下错误:
目标项目'MovieAPI'与迁移程序集'MovieManagementLibrary'不匹配。请更改目标项目或迁移程序集。
通过DbContextOptionsBuilder更改迁移程序集,例如:options.UseSqlServer(connection, b => b.MigrationsAssembly("MovieAPI"))。默认情况下,迁移程序集是包含DbContext的程序集。
通过程序包管理器控制台的默认项目下拉列表更改目标项目,或在包含迁移项目的目录中执行"dotnet ef"命令。
我的DbContext代码如下:
using Microsoft.EntityFrameworkCore; using MovieManagementLibrary.Models; namespace MovieManagementLibrary.Data { public class MovieDbContext : DbContext { public MovieDbContext(DbContextOptions<MovieDbContext> options) : base(options) { } public DbSet<Movie> Movies { get; set; } } }
解决方法
方法一:指定迁移程序集到主项目
在主项目MovieAPI的配置文件(如Program.cs)中,注册DbContext时显式指定迁移程序集为MovieAPI,让EF Core将迁移文件生成到主项目中:
builder.Services.AddDbContext<MovieDbContext>(options => options.UseSqlServer( builder.Configuration.GetConnectionString("DefaultConnection"), b => b.MigrationsAssembly("MovieAPI") // 指定迁移程序集为主项目名称 ));
配置完成后,直接在主项目中执行迁移命令即可。
方法二:修改迁移命令的目标项目
包管理器控制台(Visual Studio)
- 打开包管理器控制台,将默认项目下拉选项切换为
MovieManagementLibrary - 执行迁移命令:
Add-Migration InitialCreate Update-Database
dotnet CLI
- 打开命令行,切换到
MovieManagementLibrary类库的目录 - 执行以下命令(通过
--startup-project指定主项目作为启动依赖):
dotnet ef migrations add InitialCreate --startup-project ../MovieAPI dotnet ef database update --startup-project ../MovieAPI
内容的提问来源于stack exchange,提问作者el halcon
相关产品推荐
相关产品推荐

