using dotenv.net; using dotenv.net.Utilities; using Microsoft.EntityFrameworkCore; using Pf2eModel.Model.Base; using Pf2eModel.Model.Base.Keywords; using Pf2eModel.Model.Base.Source; using Pf2eModel.Model.Base.Targets; using Pf2eModel.Model.Common; using Pf2eModel.Model.Common.I18n; using Pf2eModel.Model.Enum; using Pf2eModel.Model.Structure; using Pf2eModel.Model.Structure.AncestryRelation; using Pf2eModel.Model.Structure.BackgroundRelation; using Pf2eModel.Model.Structure.ClassRelation; using Pf2eModel.Model.Structure.DeityRelation; using Pf2eModel.Model.Structure.FeatRelation; using Pf2eModel.Model.Structure.RitualRelation; using Pf2eModel.Model.Structure.SpellRelation; namespace Pf2eModel; /// /// Контекст базы данных. /// /// Разделён на 2 файла для удобства навигации и чтения кода. /// /// - в `Pf2eDbContext.cs` находится набор таблиц и конфигурация БД, /// - в `Pf2eDbContextModel.cs` находится Fluent API описание связей в модели. /// // ReSharper disable once InconsistentNaming public partial class Pf2eDbContext : DbContext { /// /// Инициализирует новый экземпляр класса без параметров. /// public Pf2eDbContext() { } /// /// Инициализирует новый экземпляр класса с указанными параметрами конфигурации базы данных. /// /// Конфигурация базы данных. public Pf2eDbContext(DbContextOptions options) : base(options) { } #region DbSets #pragma warning disable CS1591 // Missing XML comment for publicly visible type or member public virtual DbSet Actions { get; set; } public virtual DbSet Ancestries { get; set; } public virtual DbSet Archetypes { get; set; } public virtual DbSet AncestryBoosts { get; set; } public virtual DbSet AncestryItems { get; set; } public virtual DbSet AncestryLanguages { get; set; } public virtual DbSet Backgrounds { get; set; } public virtual DbSet BackgroundBoosts { get; set; } public virtual DbSet BackgroundItems { get; set; } public virtual DbSet BackgroundSkills { get; set; } public virtual DbSet Classes { get; set; } public virtual DbSet ClassKeyAbilities { get; set; } public virtual DbSet ClassProgressions { get; set; } public virtual DbSet ClassTrainings { get; set; } public virtual DbSet SubclassGroups { get; set; } public virtual DbSet Subclasses { get; set; } public virtual DbSet Conditions { get; set; } public virtual DbSet Deities { get; set; } public virtual DbSet DeityAttributes { get; set; } public virtual DbSet DeityDomains { get; set; } public virtual DbSet DeitySpells { get; set; } public virtual DbSet DeityWeapons { get; set; } public virtual DbSet Entities { get; set; } public virtual DbSet EntityAliases { get; set; } public virtual DbSet EntityExternals { get; set; } public virtual DbSet EntitySources { get; set; } public virtual DbSet ExternalTargets { get; set; } public virtual DbSet Feats { get; set; } public virtual DbSet FeatPrerequisites { get; set; } public virtual DbSet Frequencies { get; set; } public virtual DbSet Heritages { get; set; } public virtual DbSet Keywords { get; set; } public virtual DbSet KeywordAliases { get; set; } public virtual DbSet Languages { get; set; } public virtual DbSet LegacyRemasters { get; set; } public virtual DbSet Rituals { get; set; } public virtual DbSet RitualAreas { get; set; } public virtual DbSet RitualChecks { get; set; } public virtual DbSet Rules { get; set; } public virtual DbSet Sources { get; set; } public virtual DbSet Spells { get; set; } public virtual DbSet SpellAreas { get; set; } public virtual DbSet SpellDamages { get; set; } public virtual DbSet SpellDefenses { get; set; } public virtual DbSet Trainings { get; set; } public virtual DbSet Traits { get; set; } #pragma warning restore CS1591 // Missing XML comment for publicly visible type or member #endregion /// protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { DotEnv.Load(options: new DotEnvOptions(probeForEnv: true, probeLevelsToSearch: 2)); string databaseConnection = EnvReader.GetStringValue("DATABASE_CONNECTION"); // optionsBuilder.LogTo(Console.WriteLine); optionsBuilder.UseSnakeCaseNamingConvention(); optionsBuilder.EnableSensitiveDataLogging(); optionsBuilder.UseNpgsql( databaseConnection, builder => { builder .MapEnum() .MapEnum() .MapEnum() .MapEnum() .MapEnum() .MapEnum() .MapEnum() .MapEnum() .MapEnum() .MapEnum() .MapEnum() .MapEnum() .MapEnum() .MapEnum() .MapEnum() .MapEnum() .MapEnum() .MapEnum() .MapEnum() .MapEnum() .MapEnum() .MapEnum(); } ); } }