我已将IdentityServer4设置在服务结构项目中,一切正常,直到我决定停止在内存中加载配置并使用他们拥有的ConfigurationDb和PersistedGrantDb。我在“找不到PersistedGrantDbContext”的cmd上得到错误;如果我改变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;
//});
如果您需要更多上下文或代码来解决这个问题,请告诉我。谢谢!
答案 0 :(得分:0)
根据问题的评论,我认为数据库没有设置。
您需要针对正确的上下文运行update database命令,以确保它被创建并填充。
<强>的dotnet-CLI 强>
dotnet ef database update -c PersistedGrantDbContext
dotnet ef database update -c ConfigurationDbContext
程序包管理器控制台
Update-Database -Context PersistedGrantDbContext
Update-Database -Context ConfigurationDbContext
如果上下文不在数据库中,则会创建它们并使用创建数据为它们播种。