【问题标题】:Extend configuration and operational data contexts of Identity Server 4扩展 Identity Server 4 的配置和操作数据上下文
【发布时间】:2021-04-08 06:00:30
【问题描述】:

我想自定义 Identity Server 4 的配置和操作数据上下文。

我只是让你看一下配置存储的代码,因为代码真的很相似。

这是我的自定义商店:

internal class MyConfigurationDbContext : ConfigurationDbContext
{
    public MyConfigurationDbContext(DbContextOptions<ConfigurationDbContext> options, ConfigurationStoreOptions storeOptions)
        : base(options, storeOptions)
    {
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.HasDefaultSchema("configuration");
    }
}

在这里,我有第一个疑问。我认为构造函数的签名应该是

public MyConfigurationDbContext(DbContextOptions<MyConfigurationDbContext> options, ConfigurationStoreOptions storeOptions)

但在这种情况下,它无法将DbContextOptions&lt;MyConfigurationDbContext&gt; 转换为DbContextOptions&lt;ConfigurationDbContext&gt;

好吧,在我的 sturtup 中,我有这个代码:

builder.AddConfigurationStore<MyConfigurationDbContext>(options =>
{
    options.ConfigureDbContext = b => b.UseSqlServer(connectionString,
        sql => sql.MigrationsAssembly(MIGRATION_ASSEMBLY));
});

然后,我尝试生成第一个迁移:

Add-Migration InitialIdentityServerPersistedGrantDbMigration -Context MyConfigurationDbContext -OutputDir Data/Migrations/IdentityServer/PersistedGrantDb

但是在这种情况下,我得到了这个错误:

Unable to resolve service for type 'Microsoft.EntityFrameworkCore.DbContextOptions`1[IdentityServer4.EntityFramework.DbContexts.ConfigurationDbContext]' while attempting to activate 'My.IdentityServer.DataLayer.Repository.Contexts.MyConfigurationDbContext'.

我该如何解决?

谢谢

【问题讨论】:

    标签: entity-framework-core identityserver4 entity-framework-migrations dbcontext


    【解决方案1】:

    正如您猜对的那样,您必须在上下文构造函数中使用DbContextOptions&lt;MyConfigurationDbContext&gt; 类型作为选项参数。

    但为了能够调用基本构造函数,而不是默认的非泛型 ConfigurationDbContext,您应该使用您的上下文类型作为泛型类型参数从泛型 ConfigurationDbContext&lt;TContext&gt; 继承您的上下文:

    internal class MyConfigurationDbContext : ConfigurationDbContext<MyConfigurationDbContext>
    {
        public MyConfigurationDbContext(DbContextOptions<MyConfigurationDbContext> options, ConfigurationStoreOptions storeOptions)
            : base(options, storeOptions)
        {
        }
    
        // ...
    }
    

    【讨论】:

    • 我多么愚蠢...我没想到我可以更改自定义上下文的继承...它有效
    猜你喜欢
    • 1970-01-01
    • 2019-05-06
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 2021-01-17
    相关资源
    最近更新 更多