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 Domains { 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 DeityCategories { 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();
}
);
}
}