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

.NET CLI+PostgreSQL下EF Core迁移失败,求解决方案

解决方案

1. 修复EF Core工具版本不匹配问题

你的全局dotnet ef工具版本(6.0.10)低于项目依赖的EF Core 7.0.0,执行以下命令更新全局工具:

dotnet tool update --global dotnet-ef --version 7.0.0

若不想全局更新,可使用本地工具:

  • 在解决方案根目录执行:dotnet new tool-manifest
  • 安装本地指定版本:dotnet tool install dotnet-ef --version 7.0.0
  • 后续执行dotnet ef命令会自动使用本地安装版本

2. 修正EmployeeDbContext构造函数

当前DbContext使用非泛型DbContextOptions,导致EF Core设计时无法正确实例化上下文,修改为泛型版本:

using Microsoft.EntityFrameworkCore;
using SuperMarket.Data.Employees.Models;

namespace SuperMarket.Data.Employees.Data
{
    public class EmployeeDbContext : DbContext
    {
        // 改为泛型DbContextOptions<EmployeeDbContext>
        public EmployeeDbContext(DbContextOptions<EmployeeDbContext> options) : base(options)
        {
        }
        
        public DbSet<Employee> Employees {get; set;}
        public DbSet<User> Users {get; set;}
        public DbSet<SalaryComponents> SalaryComponents {get; set;}
        public DbSet<EmployeeSalary> EmployeeSalary{get; set;}
    }
}

3. 验证迁移命令执行环境

确保执行迁移命令时,当前工作目录为SuperMarket.Data.Employees层根目录,命令保持不变:

dotnet ef migrations add addColoums -s ../SuperMarket.Api.Employees/

同时确认启动项目SuperMarket.Api.Employees的配置文件中,连接字符串配置正确。

备选方案:实现设计时上下文工厂

若上述步骤仍无法解决,可添加IDesignTimeDbContextFactory实现,手动控制上下文创建逻辑:

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

namespace SuperMarket.Data.Employees.Data
{
    public class EmployeeDbContextFactory : IDesignTimeDbContextFactory<EmployeeDbContext>
    {
        public EmployeeDbContext CreateDbContext(string[] args)
        {
            var configuration = new ConfigurationBuilder()
                .SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "../SuperMarket.Api.Employees"))
                .AddJsonFile("appsettings.json")
                .Build();

            var optionsBuilder = new DbContextOptionsBuilder<EmployeeDbContext>();
            optionsBuilder.UseNpgsql(configuration.GetConnectionString("SuperMarketDb"));

            return new EmployeeDbContext(optionsBuilder.Options);
        }
    }
}

内容的提问来源于stack exchange,提问作者Muhammed Irshad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:25:27