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

.NET Core报错‘无法创建BlogDbContext对象’求解决方案

解决.NET Core中"Unable to create an object of type 'BlogDbContext'"错误

问题根源分析

  1. 重复注册DbContext导致配置覆盖
    你的Startup.cs中连续两次注册BlogDbContext:第一次配置了SQL Server连接和迁移程序集,第二次无参数调用AddDbContext<BlogDbContext>()会覆盖之前的配置,导致DI容器无法获取正确的DbContextOptions实例。

  2. Startup类未被集成到Program.cs
    .NET 6+采用最小API模板,你的Program.cs中没有调用Startup类的配置方法,导致你在Startup中定义的DbContext注册根本没生效。

解决方案

方案1:移除Startup类,直接在Program.cs中配置(推荐)

删除Startup.cs,修改Program.cs如下:

using Application.Context;
using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);

// 添加服务到容器
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

// 配置BlogDbContext
builder.Services.AddDbContext<BlogDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MainDB"),
        x => x.MigrationsAssembly("Application")));

var app = builder.Build();

// 配置HTTP请求管道
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

方案2:保留Startup类并集成到Program.cs

修改Program.cs,集成Startup的配置:

using Application;

var builder = WebApplication.CreateBuilder(args);

// 使用Startup配置服务
var startup = new Startup(builder.Configuration);
startup.ConfigureServices(builder.Services);

builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// 使用Startup配置中间件
startup.Configure(app, app.Environment);

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

同时修改Startup.cs,移除重复的DbContext注册:

using Application.Context;
using Microsoft.EntityFrameworkCore;

namespace Application;

public class Startup
{
    private readonly IConfiguration _configuration;

    public Startup(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        // 仅保留一次DbContext注册
        services.AddDbContext<BlogDbContext>(options =>
            options.UseSqlServer(_configuration.GetConnectionString("MainDB"),
                x => x.MigrationsAssembly("Application")));
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
    }
}

额外检查项

  • 确认appsettings.json中存在正确格式的MainDB连接字符串:
    {
      "ConnectionStrings": {
        "MainDB": "Server=你的服务器地址;Database=BlogDB;Trusted_Connection=True;TrustServerCertificate=True;"
      }
    }
    
  • 确认MigrationsAssembly("Application")中的程序集名称与包含迁移文件的项目名称一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 05:37:03