我正在尝试运行员工控制器的索引页面,但是一旦我运行并运行,它就会给我这个错误,如下所示,
处理请求时发生未处理的异常。 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 创建
您可以使用 VS 2022 创建新的 .Net 8 MVC 应用程序,并在选择 .Net 版本时将身份验证类型选择为个人帐户。
然后您将拥有一个使用 EF core 连接 sql server 的示例项目。你还会在Program.cs中看到
builder.Services.AddDbContext<ApplicationDbContext>(options =>options.UseSqlServer(connectionString));
,这一行注入了DbContext。
在您的错误消息中,我们可以看到
ApplicationDbContext
尚未完成依赖项注入。这就是为什么我说你需要添加builder.Services.AddDbContext
。如果您遇到额外错误,您还可以将您的项目与此示例应用程序进行比较,以获取 nuget 包及其版本等信息。示例应用程序集成了 Asp.net Core 默认身份。