Как перенести конфигурацию кода Identity Server 6 в базу данных?
Я использую Identity Server 6 и следую различным кратким руководствам, чтобы начать работу с ним. У меня есть закодированная конфигурация (в файле Config.cs), но мой IS-сервер теперь использует поставщик конфигурации базы данных EF для MS SQL. Теперь я хочу взять закодированную конфигурацию клиента и перенести ее в свою базу данных. Я нашел статью, в которой описывается один из подходов к написанию кода, который сделает это. Код показан ниже. Однако этот код не скомпилируется в моем проекте IS 6, поскольку объект InMemoryConfig не распознается. Я предполагаю, что это связано с тем, что код, возможно, был создан для более ранней версии IS; однако, поскольку я не знаком с исходным кодом IS, я даже не знаю, с чего начать, когда дело доходит до его обновления или адаптации.
По сути, я ищу любое решение, которое автоматизирует процесс записи конфигурации кода IS 6 в базу данных IS 6 EF.
Был бы очень признателен за любые указания в правильном направлении. Заранее спасибо.
using Duende.IdentityServer.EntityFramework.DbContexts;
using Microsoft.EntityFrameworkCore;
namespace IdentityServer
{
public static class MigrationManager
{
public static IHost MigrateDatabase(this IHost host)
{
using (var scope = host.Services.CreateScope())
{
scope.ServiceProvider.GetRequiredService<PersistedGrantDbContext>().Database.Migrate();
using (var context = scope.ServiceProvider.GetRequiredService<ConfigurationDbContext>())
{
try
{
context.Database.Migrate();
if (!context.Clients.Any())
{
foreach (var client in InMemoryConfig.GetClients())
{
context.Clients.Add(client.ToEntity());
}
context.SaveChanges();
}
if (!context.IdentityResources.Any())
{
foreach (var resource in InMemoryConfig.GetIdentityResources())
{
context.IdentityResources.Add(resource.ToEntity());
}
context.SaveChanges();
}
if (!context.ApiScopes.Any())
{
foreach (var apiScope in InMemoryConfig.GetApiScopes())
{
context.ApiScopes.Add(apiScope.ToEntity());
}
context.SaveChanges();
}
if (!context.ApiResources.Any())
{
foreach (var resource in InMemoryConfig.GetApiResources())
{
context.ApiResources.Add(resource.ToEntity());
}
context.SaveChanges();
}
}
catch (Exception ex)
{
//Log errors or do anything you think it's needed
throw;
}
}
}
return host;
}
}
}