0

我已经将我的 IdentityServer4 设置在一个服务结构项目中,一切正常,直到我决定停止在内存中加载我的配置并使用它们拥有的 ConfigurationDb 和 PersistedGrantDb。我在 cmd 上收到“Cant find PersistedGrantDbContext”错误;如果我将 program.cs 更改为使用 webhost 代码运行,我能够得到它并创建迁移。我在这里缺少什么吗?可以以不同的方式完成吗?这是我的身份服务器启动代码,请记住,我现在有与在评论中加载上下文相关的代码。

        const string connectionString = @"Data Source=.;Initial Catalog=DbIdentity;MultipleActiveResultSets=true; User ID=admin; Password=123";
        var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name;

services.AddIdentityServer(options =>
        {
            options.Events.RaiseErrorEvents = true;
            options.Events.RaiseInformationEvents = true;
            options.Events.RaiseFailureEvents = true;
            options.Events.RaiseSuccessEvents = true;
        })
        .AddInMemoryClients(IdentityServerConfiguration.GetClients(clientSettings))
        .AddInMemoryApiResources(IdentityServerConfiguration.GetApiResources(clientSettings))
        .AddInMemoryIdentityResources(IdentityServerConfiguration.GetIdentityResources())
       // .AddDeveloperSigningCredential();
        .AddSigningCredential(cert);
        //.AddConfigurationStore(options =>
        //{
        //    options.ConfigureDbContext = builder =>
        //        builder.UseSqlServer(connectionString,
        //            sql => sql.MigrationsAssembly(migrationsAssembly));
        //})
        //.AddOperationalStore(options =>
        //{
        //    options.ConfigureDbContext = builder =>
        //        builder.UseSqlServer(connectionString,
        //            sql => sql.MigrationsAssembly(migrationsAssembly));

        //    options.EnableTokenCleanup = true;
        //    options.TokenCleanupInterval = 30;
        //});

如果您需要更多上下文或代码来解决这个问题,请告诉我。谢谢!

4

1 回答 1

0

根据对问题的评论,我认为数据库尚未设置。

您需要针对正确的上下文运行更新数据库命令,以确保它被创建和填充。

dotnet-cli

dotnet ef database update -c PersistedGrantDbContext
dotnet ef database update -c ConfigurationDbContext

包管理器控制台

Update-Database -Context PersistedGrantDbContext
Update-Database -Context ConfigurationDbContext

如果上下文不在数据库中,这将创建它们并使用创建数据播种它们。

于 2018-02-24T02:08:15.453 回答