using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace Hcs.WebApp.Data.Hcs { public class HcsDbContext(DbContextOptions options) : DbContext(options) { public DbSet Registries { get; set; } public DbSet Elements { get; set; } public DbSet Campaigns { get; set; } public DbSet Operations { get; set; } public DbSet Houses { get; set; } public DbSet FilesToParse { get; set; } public DbSet SupplyContracts { get; set; } public DbSet Accounts { get; set; } public DbSet MeteringDevices { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .UseSeeding((context, _) => { if (context.Set().Count() == 0) { var registries = GetDefaultRegistries(); context.Set().AddRange(registries); context.SaveChanges(); } }) .UseAsyncSeeding(async (context, _, cancellationToken) => { if (!await context.Set().AnyAsync()) { var registries = GetDefaultRegistries(); await context.Set().AddRangeAsync(registries); await context.SaveChangesAsync(); } }); } private IEnumerable GetDefaultRegistries() { var result = new List { new() { Number = 2, Name = "Коммунальный ресурс", IsCommon = true }, new() { Number = 3, Name = "Вид коммунальной услуги", IsCommon = true }, new() { Number = 16, Name = "Межповерочный интервал", IsCommon = true }, new() { Number = 24, Name = "Состояние дома", IsCommon = true }, new() { Number = 27, Name = "Тип прибора учета", IsCommon = true }, new() { Number = 32, Name = "Часовые зоны по Olson", IsCommon = true }, new() { Number = 51, Name = "Вид коммунальной услуги", IsCommon = false }, new() { Number = 58, Name = "Основание заключения договора", IsCommon = true }, new() { Number = 239, Name = "Тарифицируемый ресурс", IsCommon = true }, new() { Number = 276, Name = "Показатели качества коммунальных ресурсов", IsCommon = true }, new() { Number = 338, Name = "Стадия жизненного цикла", IsCommon = true } }; return result; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .Property(x => x.Type) .HasConversion(new EnumToStringConverter()); modelBuilder.Entity() .Property(x => x.Type) .HasConversion(new EnumToStringConverter()); } } }