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

.NET操作PostgreSQL执行Add-Migration时无法创建ApplicationDbContext对象

解决.NET中PostgreSQL执行Add-Migration时无法创建ApplicationDbContext的问题

问题原因及修复步骤

1. 调整Program.cs的服务注册顺序

你的代码中提前调用了app = builder.Build(),之后才注册DbContext服务,这会导致EF Core设计时工具无法获取到DbContext的依赖配置。正确逻辑是先完成所有服务注册,再构建应用实例。

修改后的Program.cs代码:

using expenseTracker.Models;
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);

// 先添加控制器服务
builder.Services.AddControllersWithViews();

// 注册DbContext服务(必须在app.Build()之前)
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseNpgsql(
        builder.Configuration.GetConnectionString("DevConnection")
    )
);

// 最后构建应用实例
var app = builder.Build();

// 配置HTTP请求管道
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();

2. 修正ApplicationDbContext的构造函数参数

当前构造函数使用非泛型的DbContextOptions,改为泛型DbContextOptions<ApplicationDbContext>后,EF Core能更准确地解析依赖关系。

修改后的ApplicationDbContext代码:

using Microsoft.EntityFrameworkCore;

namespace expenseTracker.Models
{
    public class ApplicationDbContext : DbContext
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options):base(options)
        {}
        public DbSet<Transaction> Transactions { get; set; }
        public DbSet<Category> Categories { get; set; }
    }
}

3. 确认连接字符串配置

确保appsettings.json中存在正确的DevConnection配置,格式示例:

{
  "ConnectionStrings": {
    "DevConnection": "Host=localhost;Database=TransactionDB;Username=postgres;Password=admin"
  }
}

4. 重新执行迁移命令

完成所有修改后,重新运行迁移命令:

Add-Migration "Initial Create"

内容的提问来源于stack exchange,提问作者Rachel Duan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:01:12