You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET分层项目拆分后EF Core迁移无法生成到指定类库问题

EF Core多项目分层结构迁移文件生成配置方案

场景说明

应用拆分多项目分层结构前,Models、Database相关代码全部存放在BulkyBookWeb项目内,拆分后的解决方案结构如下:

BulkyBook
├─ BulkyBook.DataAccess
├─ BulkyBook.Models
├─ BulkyBook.Utility
└─ BulkyBookWeb

各项目职责划分:

  • BulkyBook.DataAccess:存放ApplicationDbContext、迁移文件、仓储相关代码
  • BulkyBook.Models:存放实体模型定义
  • BulkyBook.Utility:存放通用工具类
  • BulkyBookWeb:Web应用入口项目

在BulkyBookWeb项目路径下直接执行迁移命令dotnet ef migrations add AddCoverTypeToDatabase时,会抛出如下报错:

Your target project 'BulkyBookWeb' doesn't match your migrations assembly 'BulkyBook.DataAccess'. Either change your target project or change your migrations assembly.
Change your migrations assembly by using DbContextOptionsBuilder. E.g. options.UseSqlServer(connection, b => b.MigrationsAssembly("BulkyBookWeb")). By default, the migrations assembly is the assembly containing the DbContext.
Change your target project to the migrations project by using the Package Manager Console's Default project drop-down list, or by executing "dotnet ef" from the directory containing the migrations project.

此前尝试将MigrationsAssembly配置为BulkyBookWeb后,迁移文件夹生成在了BulkyBookWeb项目内,不符合预期需求:基于BulkyBook.Models中定义的模型,将迁移文件生成到BulkyBook.DataAccess项目的Migrations文件夹中。

正确配置步骤

1. 修正DbContext注册的迁移程序集配置

修改BulkyBookWeb项目中Program.cs的DbContext注入代码,将迁移程序集指向BulkyBook.DataAccess:

builder.Services.AddDbContext<ApplicationDbContext>(options => 
    options.UseSqlServer(
        builder.Configuration.GetConnectionString("AppDbContext"), 
        b => b.MigrationsAssembly("BulkyBook.DataAccess")
    )
);

注意:此处填写的BulkyBook.DataAccess为DataAccess项目的程序集名称,默认与项目名一致,若项目csproj中自定义了AssemblyName,需替换为实际配置值。

该配置的作用是告知EF Core运行时,到指定程序集加载已生成的迁移文件,避免运行时抛出找不到迁移文件的异常。

2. 执行迁移命令时显式指定项目参数

不要在BulkyBookWeb项目目录下直接执行无参数的ef命令,切换到解决方案根目录执行命令,通过参数显式指定启动项目和迁移存放的目标项目:

# 生成迁移文件
dotnet ef migrations add AddCoverTypeToDatabase --project BulkyBook.DataAccess --startup-project BulkyBookWeb

# 同步迁移到数据库
dotnet ef database update --project BulkyBook.DataAccess --startup-project BulkyBookWeb

参数说明:

  • --project(简写-p):指定迁移文件生成的目标项目,传入BulkyBook.DataAccess后,Migrations文件夹会自动生成在该项目根目录下
  • --startup-project(简写-s):指定承载应用配置(数据库连接字符串、依赖注入配置等)的启动项目,此处传入入口项目BulkyBookWeb即可

如果使用Visual Studio内置的包管理器控制台(PMC)执行迁移,无需添加命令行参数:将控制台顶部的「默认项目」下拉选项切换为BulkyBook.DataAccess,保持解决方案启动项目为BulkyBookWeb,直接执行Add-Migration AddCoverTypeToDatabase、Update-Database命令即可。


内容的提问来源于stack exchange,提问作者Vagner Wentz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 15:51:25