Ich baue derzeit eine .NET Core Identity Server-Anwendung, die Migrationen verwendet und fragte mich, was die beste Methode zum Seeding einer Datenbank in Bezug auf .NET-Kern wäre.Seeding in .Net Core
Momentan habe ich eine DbInitializer-Klasse, die beim Start (siehe unten) aufgerufen wird, aber fragte mich, ob ich dies als eine Migration tun sollte?
public static void Seed(IApplicationBuilder applicationBuilder)
{
ConfigurationDbContext context =
applicationBuilder.ApplicationServices.GetRequiredService<ConfigurationDbContext>();
IConfiguration oConfig =
applicationBuilder.ApplicationServices.GetRequiredService<IConfiguration>();
string sSeedingConfig = GetSeedingConfiguration(oConfig);
SeedConfigurationDb(ref context, sSeedingConfig);
}
private static void SeedConfigurationDb(ref ConfigurationDbContext oContext, string sSeedingConfig)
{
if (!oContext.ApiResources.Any())
{
var oApis = GetSeedingConfigElements(sSeedingConfig, "Apis");
List<ApiResource> lApis = null;
if (oApis != null)
{
lApis = JsonConvert.DeserializeObject<List<ApiResource>>(oApis.ToString());
}
if (lApis != null)
{
foreach (var api in lApis)
{
oContext.ApiResources.Add(api.ToEntity());
}
}
}
if (!oContext.Clients.Any())
{
var oClients = GetSeedingConfigElements(sSeedingConfig, "Clients");
List<Client> lClients = null;
if (oClients != null)
{
lClients = JsonConvert.DeserializeObject<List<Client>>(oClients.ToString());
}
if (lClients != null)
{
foreach (var client in lClients)
{
oContext.Clients.Add(client.ToEntity());
}
}
}
if (!oContext.IdentityResources.Any())
{
var oIdentityResources = GetSeedingConfigElements(sSeedingConfig, "IdentityResources");
List<IdentityResource> lIdentityResources = null;
if (oIdentityResources != null)
{
lIdentityResources = JsonConvert.DeserializeObject<List<IdentityResource>>(oIdentityResources.ToString());
}
if (lIdentityResources != null)
{
foreach (var identityresource in lIdentityResources)
{
oContext.IdentityResources.Add(identityresource.ToEntity());
}
}
}
oContext.SaveChanges();
}
Ich habe tatsächlich den folgenden Befehl ausgeführt, um meine Datenbank 'dotnet ef migrations hinzufügen InitialIdentityServerMigration -c ConfigurationDbContext' zu erstellen. Diese Methode hat standardmäßig keine Konfigurationsklasse erstellt, daher wusste ich nicht, ob sich die Implementierung geringfügig vom neuen Framework unterscheidet. Ich weiß in früheren Framework-Versionen, dass dies immer der Weg war, den Seeding-Prozess durchzuführen, aber .NET-Core braucht etwas Zeit, um sich daran zu gewöhnen. – GSkidmore
@GSkidmore überprüfen Sie diese: http://www.dalsoft.co.uk/blog/index.php/2016/12/13/entity-framework-core-seeding-using-migrations/, es ist eine Arbeit um zu säen mit Migrationen, bis EF Core die Funktionalität hinzufügt, sollte dies den Trick tun. – TanguyB
Brilliant danke, wirklich zu schätzen! – GSkidmore