InvalidOperationException:尝试激活时无法解析类型“ApplicationDbContext”的服务

问题描述 投票:0回答:1

我正在尝试运行员工控制器的索引页面,但是一旦我运行并运行,它就会给我这个错误,如下所示,

处理请求时发生未处理的异常。 InvalidOperationException:尝试激活“Employeeproject.Views.EmployeesController”时无法解析类型“ApplicationDbContext”的服务。

请找到我的员工模型课程

namespace Employeeproject.Models
{
    public class Employee
    {

        public int Id { get; set; }
        public string FirstName { get; set; }
        public string MiddleName { get; set; }
        public string LastName { get; set; }
        public string EmailAddress { get; set; }
        public int PhoneNo { get; set; }
    }
}

索引函数已经写在Employees控制器中。请在下面找到它,

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.AspNetCore.Mvc.Rendering;
    using Microsoft.EntityFrameworkCore;
    using Employeeproject.Models;
    
    namespace Employeeproject.Views
    {
        public class EmployeesController : Controller
        {
            private readonly ApplicationDbContext _context;
    
    
    
            public EmployeesController(ApplicationDbContext context)
            {
                _context = context;
            }
    
            // GET: Employees
            public async Task<IActionResult> Index()
            {
                return View(await _context.Employee.ToListAsync());
            }
}

}

请在下面找到员工数据库上下文代码,

using Employeeproject.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Identity.Client;



public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

public DbSet<Employeeproject.Models.Employee> Employee { get; set; } = default!;

    // DbSets go here
}

public class ApplicationDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
{
    public ApplicationDbContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
        optionsBuilder.UseSqlServer("DefaultConnection");

        return new ApplicationDbContext(optionsBuilder.Options);
    }
}

请找到下面的program.cs代码

using Microsoft.AspNetCore.Builder;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Configuration;


var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Employees}/{action=Index}/{id?}");

app.Run();

appsetting.json代码如下所述,

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=user;",
    "Server": "Server=User\\SQLEXPRESS;Database:Employees; User Id=Ammadlogin;Password:ammadpass1; TrueServerCertificate=True"


  },

  


    "Logging": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "AllowedHosts": "*"
  }

目前我想运行员工控制器索引页面。 appsettings.json 中的连接字符串似乎存在一些问题。如果我转到 SQL Management studio 中服务器的属性,那里的名称只是“User”,所以我现在已经在连接字符串中给出了正确的名称。迁移已使用 InitialMigrations.cs 创建

c# asp.net entity-framework asp.net-core
1个回答
0
投票

您可以使用 VS 2022 创建新的 .Net 8 MVC 应用程序,并在选择 .Net 版本时将身份验证类型选择为个人帐户。

enter image description here

然后您将拥有一个使用 EF core 连接 sql server 的示例项目。你还会在Program.cs中看到

builder.Services.AddDbContext<ApplicationDbContext>(options =>options.UseSqlServer(connectionString));
,这一行注入了DbContext。

在您的错误消息中,我们可以看到

ApplicationDbContext
尚未完成依赖项注入。这就是为什么我说你需要添加
builder.Services.AddDbContext
。如果您遇到额外错误,您还可以将您的项目与此示例应用程序进行比较,以获取 nuget 包及其版本等信息。示例应用程序集成了 Asp.net Core 默认身份。

© www.soinside.com 2019 - 2024. All rights reserved.