using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; namespace ChaosBot.Models { public class ChaosbotContext : DbContext { public DbSet LodestoneCharacter { get; set; } public DbSet LodestoneFreeCompany { get; set; } public DbSet Points { get; set; } public DbSet Raffles { get; set; } public DbSet CommandPermissions { get; set; } public DbSet Configuration { get; set; } public DbSet ExperiencePoints { get; set; } public DbSet RoleReactions { get; set; } public DbSet CustomCommands { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { string server, user, pass, name; int port; if (Program.AppSettingsHandler == null) { IConfiguration config = Program.AppSettingsHandler = new ConfigurationBuilder() .SetBasePath(System.IO.Directory.GetCurrentDirectory()) .AddJsonFile("./appsettings.json", optional: false, reloadOnChange: true).Build(); server = config.GetValue("Database:Host"); port = config.GetValue("Database:Port"); user = config.GetValue("Database:User"); pass = config.GetValue("Database:Pass"); name = config.GetValue("Database:Name"); } else { ConfigHelpers.Configuration config = new ConfigHelpers.Configuration(); server = config.GetByKey("Database:Host").GetValue(readRestricted: true); port = config.GetByKey("Database:Port").GetValue(readRestricted: true); user = config.GetByKey("Database:User").GetValue(readRestricted: true); pass = config.GetByKey("Database:Pass").GetValue(readRestricted: true); name = config.GetByKey("Database:Name").GetValue(readRestricted: true); } optionsBuilder.UseMySql( $"server={server};port={port};user={user};password={pass};database={name}", x => x.ServerVersion("5.5.64-mariadb")); } } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .HasKey(x => new {x.DiscordGuildId, x.LodestoneId}); modelBuilder.Entity() .HasKey(x => new {x.DiscordGuildId, x.LodestoneId}); modelBuilder.Entity() .HasKey(x => new {x.DiscordGuildId, x.DiscordUserId}); modelBuilder.Entity() .HasKey(x => new {x.DiscordGuildId, x.DiscordUserId}); modelBuilder.Entity() .HasKey(x => new {x.DiscordGuildId, x.Key}); modelBuilder.Entity() .HasKey(x => new {x.DiscordGuildId, x.DiscordMessageId, x.DiscordRoleId, x.DiscordEmoteNameEncoded}); modelBuilder.Entity() .HasKey(x => new {x.DiscordGuildId, x.Command}); } } }