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

.NET Core 6项目命令行执行dotnet ef更新数据库时无法创建DbContext

解决VS Code中dotnet ef database update无法创建DbContext的问题

针对你遇到的问题,核心原因是EF Core工具在命令行执行时,无法自动识别启动项目(配置了DbContext服务和连接字符串的Tutorial.API)和迁移项目(包含DbContext和迁移文件的Tutorial.Data)的关联,而Visual Studio 2022会自动处理这种关联关系。下面提供两种可行的解决方案:

方案一:使用命令行参数指定项目关联

这是最直接的解决方式,无需修改代码,只需在执行dotnet ef命令时明确指定启动项目和迁移项目:

  1. 打开VS Code终端,切换到解决方案根目录(或任意目录,确保项目名称/路径正确)
  2. 执行以下命令:
dotnet ef database update --project Tutorial.Data --startup-project Tutorial.API

参数说明:

  • --project Tutorial.Data:指定包含SkyNetDBContext和迁移文件的项目
  • --startup-project Tutorial.API:指定配置了DbContext服务、连接字符串的启动项目,EF工具会从该项目读取配置信息

方案二:实现IDesignTimeDbContextFactory接口

如果希望无需每次指定项目参数,可以在Tutorial.Data项目中添加一个DbContext工厂类,让EF工具直接通过该工厂创建DbContext实例:

在Tutorial.Data项目中创建如下类:

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

namespace Tutorial.Data
{
    public class SkyNetDBContextFactory : IDesignTimeDbContextFactory<SkyNetDBContext>
    {
        public SkyNetDBContext CreateDbContext(string[] args)
        {
            // 读取启动项目中的配置文件(需根据实际路径调整)
            var configPath = Path.Combine(Directory.GetCurrentDirectory(), "../Tutorial.API");
            IConfigurationRoot configuration = new ConfigurationBuilder()
                .SetBasePath(configPath)
                .AddJsonFile("appsettings.json")
                .Build();

            var options = new DbContextOptionsBuilder<SkyNetDBContext>()
                .UseSqlServer(configuration.GetConnectionString("DefaultConnectionString"))
                .Options;

            return new SkyNetDBContext(options);
        }
    }
}

添加完成后,直接在Tutorial.Data项目目录下执行dotnet ef database update即可,EF工具会自动调用该工厂类创建DbContext。

注意:如果你的解决方案目录结构有变化,需要调整configPath的值,确保能正确读取到Tutorial.API项目中的appsettings.json文件。

内容的提问来源于stack exchange,提问作者pio sankar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 22:48:35