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

WPF Core 6.0三层项目执行Add-Migration报错:无法创建FactoryDbContext对象

解决WPF Core 6.0中EF Core迁移无法创建DbContext的问题

问题原因

EF Core执行Add-Migration等设计时命令时,不会触发WPF应用的App启动逻辑,因此无法通过你在ConfigureServices中配置的依赖注入容器获取FactoryDbContext实例,导致报错。

解决方案

方案1:实现设计时DbContext工厂(推荐)

在FactoryDbContext所在的项目中创建一个实现IDesignTimeDbContextFactory<FactoryDbContext>的类,让EF Core在设计时通过这个工厂创建上下文实例:

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;

public class FactoryDbContextFactory : IDesignTimeDbContextFactory<FactoryDbContext>
{
    public FactoryDbContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<FactoryDbContext>();
        // 替换为你的SQL Server连接字符串,也可以从配置文件读取(比如appsettings.json)
        optionsBuilder.UseSqlServer("Server=.;Database=FactoryDB;Trusted_Connection=True;TrustServerCertificate=True;");

        return new FactoryDbContext(optionsBuilder.Options);
    }
}

方案2:添加无参构造函数(临时测试用)

在FactoryDbContext中添加无参构造函数,内部直接配置连接字符串(不推荐生产环境使用,因为硬编码连接字符串不利于维护):

public class FactoryDbContext : DbContext
{               
    public FactoryDbContext(DbContextOptions<FactoryDbContext> options) : base(options) { }

    // 添加无参构造函数
    public FactoryDbContext() : base(GetDefaultOptions()) { }

    private static DbContextOptions<FactoryDbContext> GetDefaultOptions()
    {
        var optionsBuilder = new DbContextOptionsBuilder<FactoryDbContext>();
        optionsBuilder.UseSqlServer("Server=.;Database=FactoryDB;Trusted_Connection=True;TrustServerCertificate=True;");
        return optionsBuilder.Options;
    }
        
    // ... 你的DbSet定义
}

方案3:指定迁移命令的项目

如果你的FactoryDbContext在类库项目,而启动项目是WPF项目,执行迁移时需要明确指定启动项目和数据项目:

在Package Manager Console中执行:

Add-Migration InitialCreate -StartupProject 你的WPF项目名称 -Project 你的数据类库项目名称

或者先将Package Manager Console的「默认项目」设置为数据类库项目,确保启动项目选择WPF项目。


内容的提问来源于stack exchange,提问作者Дмитрий Кеменов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:16:57