为什么我在 ASP.NET Core 7 中收到数据库提供程序错误?

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

我有一个 ASP.NET Core 7 MVC 项目。我想将 SQL Server 连接字符串放入

appsettings.json
文件中,然后在我的整个项目和图层中使用它。

但我收到提供者错误:

System.InvalidOperationException:“尚未为此 DbContext 配置数据库提供程序。可以通过重写“DbContext.OnConfiguring”方法或在应用程序服务提供程序上使用“AddDbContext”来配置提供程序。如果使用“AddDbContext”,则还要确保您的 DbContext 类型在其构造函数中接受 DbContextOptions 对象,并将其传递给 DbContext 的基本构造函数。'

我该如何解决这个问题?

这是我的

appsettings.json
:

"ConnectionStrings": {
    "CON1": "data source=DESKTOP-JU6B74d\\SQL2019;initial catalog = Laser; integrated security = true;TrustServerCertificate=True;"
},

这是

program
DbContext
文件设置:

builder.Services.AddControllersWithViews();

builder.Services.AddDbContext<DB>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("CON1")));

这是我的数据访问层

DbContext
的一部分:

public class DB : IdentityDbContext
{
    public DB() : base() { }

    public DB(DbContextOptions<DB> options) : base(options)
    {
    }

    protected override void OnConfiguring(DbContextOptionsBuilder OptionsBuilder)
    {
        OptionsBuilder.UseSqlServer(@"data source=DESKTOP-JU6B74d\SQL2019;initial catalog = Laser; integrated security = true;TrustServerCertificate=True;");
        base.OnConfiguring(OptionsBuilder);
    }
}

当我使用这个

DbContext
时,我没有收到提供程序错误并且程序运行没有问题。但在这种形式中,我也应该在
DbContext
文件中重复我的连接字符串。

所以当我注释掉

protected override void OnConfiguring

方法,我收到提供者错误。如何解决此问题并仅从

appsettings.json
文件中读取连接字符串 - 以及为什么会出现此问题?

asp.net-core identity dbcontext provider
1个回答
0
投票

您可以参考检查生成的数据库上下文类和注册来创建数据库上下文类和注册。

数据库上下文类:

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

构造函数使用依赖注入将数据库上下文(MvcMovieContext)注入到控制器中:

public class MoviesController : Controller
{
    private readonly MvcMovieContext _context;

    public MoviesController(MvcMovieContext context)
    {
        _context = context;
    }
}

此外,配置键不区分大小写。例如,ConnectionString 和connectionstring 被视为等效键。您可以查看配置键和值以了解更多信息。

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