无法创建类型为“”的“DbContext”错误

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

这是我的webApi项目program.cs文件

using Microsoft.EntityFrameworkCore;
using testApi.Data;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlite(connectionString));

var app = builder.Build();






// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
    
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

当我想使用迁移时出现此错误:

无法创建类型为“”的“DbContext”。异常“无法解析类型“Microsoft.EntityFrameworkCore.DbContextOptions`1[testApi.Data.ApplicationDbContext]”的服务 尝试激活“testApi.Data.ApplicationDbContext”时。'

请帮我解决这个问题 谢谢

.net-core migration asp.net-core-webapi
1个回答
0
投票

无法创建类型为“”的“DbContext”。异常“无法 解析服务类型 'Microsoft.EntityFrameworkCore.DbContextOptions`1[testApi.Data.ApplicationDbContext]' 尝试激活“testApi.Data.ApplicationDbContext”时。'

根据您的错误消息,您似乎尚未将 DbContext 服务注入作为服务范围。如果您的

ApplicationDbContext
在其他类项目中创建为服务,需要添加为
AddScoped

所以你应该包括以下内容:

builder.Services.AddScoped<DbContext, ApplicationDbContext>();

除此之外,在执行迁移命令时,请确保您从下面的下拉列表中选择了正确的类项目。在您的场景中,您应该选择您的

ApplicationDbContext
所在的班级项目是
testApi.Data.ApplicationDbContext

此外,请检查您的 DbContex 和 appsettings.json 文件是否已进行相应配置。

您应该具备以下条件:

public class ApplicationDbContext: DbContext
{

    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
    {
    }
    public DbSet<Customer> Customers { get; set; }//Should be your DbSet
    public DbSet<Contact> Contacts { get; set; }
    public DbSet<TaskModel> Tasks { get; set; }


}

appsettings.json 中的连接字符串:

您的连接字符串应如下所示:

"ConnectionStrings": {
   "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=YourDatabaseName;Trusted_Connection=True;MultipleActiveResultSets=true"
 },

最后但并非最不重要的一点是,确保您已安装应用程序所需的 nuget 包,以便执行实体框架命令和迁移命令。您应该有以下软件包:

注意: 仔细检查您是否已在主项目中相应地附加了 DbContext 类库项目。另外,请参考这个官方文档

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