using ChaosBot.Models; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; namespace ChaosBot { public class DatabaseContext : 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) { IConfiguration appSettingsHandler = Program.AppSettingsHandler; if (Program.AppSettingsHandler == null) { appSettingsHandler = new ConfigurationBuilder() .SetBasePath(System.IO.Directory.GetCurrentDirectory()) .AddJsonFile(Program.AppSettingsPath).Build(); } string server = appSettingsHandler.GetValue("Database:Host"); int port = appSettingsHandler.GetValue("Database:Port"); string user = appSettingsHandler.GetValue("Database:User"); string pass = appSettingsHandler.GetValue("Database:Pass"); string name = appSettingsHandler.GetValue("Database:Name"); 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}); } } }