📅  最后修改于: 2023-12-03 15:01:27.152000             🧑  作者: Mango
当开发者在创建一个 .NET Core 项目时,可能会遇到以下错误:
IServiceCollection 不包含 “AddDbContext”的定义,并且没有可访问的扩展方法“AddDbContext”接受类型为“IS ”的第一个参数。
这个错误通常出现在应用程序配置文件中添加了 Microsoft.EntityFrameworkCore 和 Microsoft.EntityFrameworkCore.Design 包,但没有正确设置依赖注入。
依赖注入(Dependency Injection,DI)是一种设计模式,它允许开发者将对象及其依赖项实例化并注入到应用程序中。
在 .NET Core 中,依赖注入是通过使用 Microsoft.Extensions.DependencyInjection 命名空间中的 IServiceCollection 和 IServiceProvider 接口来实现的。IServiceCollection 是一种数据结构,用于对项目中需要注入的服务进行注册。注册的服务可以是对象、接口或委托。
DbContext 是 Entity Framework Core 中用于访问数据库的类,但是它必须通过依赖注入在应用程序中进行注册和配置。通常,开发者需要在 ConfigureServices 方法中使用 AddDbContext<>() 扩展方法来注册 DbContext。
基本配置如下:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
上面的配置在服务集合中注册了 ApplicationDbContext 类型,其中 ApplicationDbContext 是开发者定义的派生自 DbContext 的类。
当出现 IServiceCollection 不包含 “AddDbContext”的定义异常时,可能是由于导包问题或配置错误导致的。
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.Design
using Microsoft.EntityFrameworkCore;
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
添加完成后,重新生成并运行应用程序。如果问题仍然存在,请检查 DbContext 的定义和应用程序代码是否存在其他问题。