【问题标题】:ASP.NET Core - IdentityContext without constructor parametersASP.NET Core - 没有构造函数参数的 IdentityContext
【发布时间】:2020-04-08 02:20:43
【问题描述】:

我正在开发一个带有多个 DbContext 的 ASP.NET 核心项目,其中一个是身份上下文。

我将周涛 (Aspnet core Identity custom ApiAuthorizationDbContext) 的解决方案应用于一个问题,这首先解决了我的问题,但现在我遇到了无法创建没有参数的 ApplicationDbContext 的问题。

  • DbContextOptions 选项
  • IOptions operationStoreOptions

这里有几行代码来说明它

我在 Startup 中注册了 ApplicationDbContext

启动

services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("IdentityConnection"))
       );

ApplicationDbContext

    public class ApplicationDbContext : KeyApiAuthorizationDbContext<Identity.AspNetUsers, Identity.AspNetRoles, Guid>

    public ApplicationDbContext(DbContextOptions options,
                        IOptions<OperationalStoreOptions> operationalStoreOptions) : base(options, operationalStoreOptions)
{

}

如果我想创建一个新的

ApplicationDbContext ctx = new ApplicationDbContext();

我需要这两个参数...

如果有人能给我一个提示,那就太好了。

感谢您和最诚挚的问候, 诺埃尔

【问题讨论】:

  • 欢迎来到 StackOverflow Noel。你能解释一下为什么要创建这样的上下文而不是使用依赖注入来访问上下文吗?
  • 您好 Dennis1769,谢谢您的回答。我有一个复杂的应用程序架构,我想放松对 EF Core 和 Controller / BusinessLogic 的封装。对于我使用 DI 的其他事情。

标签: asp.net-core asp.net-identity identityserver4 dbcontext ef-core-3.0


【解决方案1】:

尝试修改上下文类,如下例:

 public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {

    }

    // C# will call base class parameterless constructor by default
    public ApplicationDbContext()
    { }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        IConfigurationRoot configuration = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json")
        .Build();
        optionsBuilder.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
    }
}

参考:

https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dbcontext-creation#using-a-constructor-with-no-parameters

https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext#onconfiguring

【讨论】:

  • 谢谢陈雪莉,但我认为这并不能解决我的问题。我需要基类“KeyApiAuthorizationDbContext”的两个参数。
  • 这只是我的测试演示。你的需求是实例化一个不带参数的 DbContext 吗?你在继承自KeyApiAuthorizationDbContextApplicationDbContext 中尝试过这个吗?
猜你喜欢
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
  • 2014-06-30
  • 2018-07-31
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多