autobus-api_old/AutobusApi.Infrastructure/DbInitializer.cs

66 lines
2.0 KiB
C#

using AutobusApi.Domain.Enums;
using AutobusApi.Infrastructure.Identity;
using AutoubsApi.Infrastructure.Data;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Npgsql;
namespace AutobusApi.Infrastructure;
public static class DbInitializer
{
public static void Initialize(ApplicationDbContext dbContext, ApplicationIdentityDbContext identityDbContext)
{
if (dbContext.Database.IsRelational())
{
var domainAppliedMigrations = dbContext.Database.GetAppliedMigrations();
var identityAppliedMigrations = identityDbContext.Database.GetAppliedMigrations();
if (domainAppliedMigrations.Count() == 0)
{
dbContext.Database.Migrate();
// https://github.com/npgsql/efcore.pg/issues/292
dbContext.Database.OpenConnection();
((NpgsqlConnection)dbContext.Database.GetDbConnection()).ReloadTypes();
InitializeDomain(dbContext);
}
if (identityAppliedMigrations.Count() == 0)
{
identityDbContext.Database.Migrate();
InitializeIdentity(identityDbContext);
}
return;
}
dbContext.Database.EnsureCreated();
InitializeDomain(dbContext);
identityDbContext.Database.EnsureCreated();
InitializeIdentity(identityDbContext);
}
private static void InitializeDomain(ApplicationDbContext dbContext)
{
}
private static void InitializeIdentity(ApplicationIdentityDbContext identityDbContext)
{
foreach (var role in Enum.GetValues(typeof(IdentityRoles)).Cast<IdentityRoles>())
{
identityDbContext.Roles.Add(new IdentityRole<int>
{
Name = role.ToString(),
NormalizedName = role.ToString().ToUpper(),
ConcurrencyStamp = Guid.NewGuid().ToString()
});
}
identityDbContext.SaveChanges();
}
}