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

.NET 8中使用EF Core Design 8.0.3执行dotnet ef迁移失败原因

迁移失败原因及解决办法

核心原因

EF Core的设计时工具(dotnet-ef)生成迁移时,无法找到ApplicationDbContext所需的DbContextOptions配置。你的ApplicationDbContext依赖构造函数注入的DbContextOptions<ApplicationDbContext>,但工具在类库项目中无法自动识别并执行InfrastructureExtensionCollection里的服务配置逻辑。

具体问题点

  • 项目类型限制:你的项目是普通类库(<Project Sdk="Microsoft.NET.Sdk">),而非Web应用类库,设计时工具无法自动触发AddInfrastructure中的DbContext配置逻辑。
  • NuGet包不完整:你仅引用了Microsoft.EntityFrameworkCore.Sqlite.Core,这个包只包含核心功能,缺少EF Core与SQLite集成必需的设计时、运行时辅助组件。
  • 设计时上下文创建逻辑缺失:类库项目没有Program.cs这类启动入口,工具无法通过依赖注入容器获取DbContext实例,需要额外提供直接创建上下文的逻辑。

解决步骤

步骤1:补全SQLite NuGet包

修改csproj配置,将Microsoft.EntityFrameworkCore.Sqlite.Core替换为完整的Microsoft.EntityFrameworkCore.Sqlite包:

<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.3" />
<!-- 移除原有的 Microsoft.EntityFrameworkCore.Sqlite.Core 引用 -->

步骤2:添加设计时DbContext工厂

在项目中创建如下类,让dotnet-ef工具能直接创建DbContext实例:

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

namespace CloudBeholder.Identity.Infrastructure;

public class ApplicationDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
{
    public ApplicationDbContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
        optionsBuilder.UseSqlite("Data Source=App.db");

        return new ApplicationDbContext(optionsBuilder.Options);
    }
}

步骤3:指定启动项目(可选,若解决方案含Web项目)

如果你的解决方案中有已调用AddInfrastructure的Web项目,执行迁移时可指定该项目作为启动入口:

dotnet-ef migrations add Initial --startup-project ../你的Web项目名称

验证

重新执行dotnet-ef migrations add Initial命令,即可成功生成初始迁移文件。

内容的提问来源于stack exchange,提问作者El Yosemite

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 08:48:26