首页 > 解决方案 > 在我的后端服务中实例化 DBContext

问题描述

我正在使用 ASP.net Core 3.1 并且还使用 IdentityServer4 和 ASP.net Core Identity 作为我的身份验证提供程序来保护我的 Web API。我编写了一个使用 OAuth 向 IdentityServer 进行身份验证的 Angular 前端。

启动.cs

services.AddIdentityServer()
    .AddApiAuthorization<User, DataContext>();

services.AddAuthentication()
    .AddIdentityServerJwt();

我的 DBContext 看起来像这样:

数据上下文.cs

public class DataContext: ApiAuthorizationDbContext<User>
{
    public DataContext(DbContextOptions options, IOptions<OperationalStoreOptions> operationalStoreOptions) : base(options, operationalStoreOptions) {}
     
    public DbSet<User> Users{ get; set; }
    public DbSet<Table1> Table1{ get; set; }
    // etc.
        
}

我正在使用 ApiAuthorizationDbContext 因为这是使用 AddApiAuthorization() 所必需的,这就是我在此处关注的 Microsoft 文档中的设置方式。这一切都适用于 Web 应用程序。

在我的应用程序中,我还有一个控制台应用程序后端服务,它需要访问数据库来读取和写入数据。如何在控制台应用程序中实例化我的 DBContext 以便我可以访问数据库?我尝试了类似的方法,但它给了我错误“对象引用未设置为对象的实例”。(我知道这是错误的,此时只是往墙上扔东西。):

var options = new DbContextOptionsBuilder()
    .UseSqlServer("Data Source=(LocalDb)\\Dev;Initial Catalog=Database;Integrated Security=True")
    .Options;
var operational = new OptionsManager<OperationalStoreOptions>(null);
using (var context = new DataContext(options, operational))
{
            
}

对于如何实例化 DBContext 以及如何创建 OperationalStoreOptions,我有点不知所措。我已经尝试了很多其他的事情(包括取消 AddApiAuthorization()),但一直无法解决这个问题。任何帮助,将不胜感激。谢谢你!

标签: c#asp.netentity-frameworkasp.net-identityidentityserver4

解决方案


推荐阅读