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

.NET5中EF与WebAPI分属不同项目执行迁移脚本报错如何解决

报错原因
  • EF Core 设计时工具运行迁移命令时,默认无法自动读取启动项目GestionStock.API中配置的上下文注入规则与数据库连接信息
  • 你的GestionStockContext仅包含带参数的构造函数,设计时工具无法直接完成实例化,也未找到对应的设计时实例化工厂
解决方案

方案1:执行迁移命令时补充参数(无需修改代码)

如果你使用包管理器控制台运行命令:

  1. 先将控制台顶部的「默认项目」切换为GestionStock.Infrastructure
  2. 执行如下命令即可:
Add-Migration Initiale -StartupProject GestionStock.API

如果你使用dotnet CLI运行命令,在解决方案根目录执行:

dotnet ef migrations add Initiale --project GestionStock.Infrastructure --startup-project GestionStock.API

方案2:添加设计时上下文工厂(无需每次加参数)

在GestionStock.Infrastructure项目根目录添加GestionStockContextFactory.cs类,代码如下:

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
using System.IO;

public class GestionStockContextFactory : IDesignTimeDbContextFactory<GestionStockContext>
{
    public GestionStockContext CreateDbContext(string[] args)
    {
        IConfigurationRoot configuration = new ConfigurationBuilder()
            // 若appsettings.json存放在API项目,可调整路径为:.SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "../GestionStock.API"))
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();

        var optionsBuilder = new DbContextOptionsBuilder<GestionStockContext>();
        optionsBuilder.UseSqlServer(configuration.GetConnectionString("Default"), 
            opt => opt.MigrationsAssembly("GestionStock.Infrastructure"));

        return new GestionStockContext(optionsBuilder.Options);
    }
}

添加完成后直接执行Add-Migration Initiale即可正常生成迁移。

注意事项
  • 确保GestionStock.API项目的appsettings.json中已正确配置名为Default的数据库连接字符串,且文件属性设置为「如果较新则复制」
  • 两个项目安装的EF Core相关包版本需与.NET 5版本匹配,统一使用5.x版本
  • 依赖包需确保已安装:Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Tools

内容的提问来源于stack exchange,提问作者The lli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:54:08