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

生成Razor视图时遇DbContextOptions服务解析错误求助

问题描述

尝试通过Scaffold生成Razor视图时出现错误:

无法解析类型为'Microsoft.EntityFrameworkCore.DbContextOptions`1[DonnaPerfum.DataAccess.Data.ApplicationDbContext]'的服务,尝试激活'DonnaPerfum.DataAccess.Data.ApplicationDbContext'时出错。

相关代码

Program.cs 配置代码

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddMvc();
builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

builder.Services.AddDatabaseDeveloperPageExceptionFilter();
builder.Services.AddDefaultIdentity<IdentityUser>(options=> options.SignIn.RequireConfirmedAccount = true).AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddScoped<IUnitOfWork, UnitOfWork>();
builder.Services.AddControllers();
builder.Services.AddControllersWithViews();

builder.Services.AddRazorPages().AddRazorRuntimeCompilation();
var app = builder.Build();

ApplicationDbContext 代码

using Donna.Models;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;

namespace DonnaPerfum.DataAccess.Data
{
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options):base(options)
{
}
public DbSet<Category> Categories { get; set; }
}
}
解决方案

该错误是因为Scaffold设计时工具无法自动获取DbContext的配置,需添加设计时工厂类来解决:

  • 在DonnaPerfum.DataAccess.Data命名空间下新增实现IDesignTimeDbContextFactory<ApplicationDbContext>的类:
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
using System.IO;

namespace DonnaPerfum.DataAccess.Data
{
    public class ApplicationDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
    {
        public ApplicationDbContext CreateDbContext(string[] args)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .Build();

            var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
            var connectionString = configuration.GetConnectionString("DefaultConnection");
            optionsBuilder.UseSqlServer(connectionString);

            return new ApplicationDbContext(optionsBuilder.Options);
        }
    }
}
  • 确认appsettings.json中存在正确的DefaultConnection连接字符串,示例格式:
{
  "ConnectionStrings": {
    "DefaultConnection": "Server=你的服务器名;Database=你的数据库名;Trusted_Connection=True;TrustServerCertificate=True;"
  }
}
  • 重新运行Scaffold命令即可。

注:你的Program.cs中已正确注册DbContext服务,但设计时工具不会直接复用该配置,必须通过工厂类提供设计时的DbContext实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:40:38