using Microsoft.EntityFrameworkCore; namespace sodoff.Model; public class DBContext : DbContext { public DbSet Users { get; set; } = null!; public DbSet Vikings { get; set; } = null!; public DbSet Dragons { get; set; } = null!; public DbSet Images { get; set; } = null!; public DbSet Sessions { get; set; } = null!; public DbSet Pairs { get; set; } = null!; public DbSet PairData { get; set; } = null!; public DbSet TaskStatuses { get; set; } = null!; public DbSet Inventories { get; set; } = null!; public DbSet InventoryItems { get; set; } = null!; public string DbPath { get; } public DBContext() { DbPath = Path.Join(Directory.GetCurrentDirectory(), "sodoff.db"); } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseSqlite($"Data Source={DbPath}").UseLazyLoadingProxies(); protected override void OnModelCreating(ModelBuilder builder) { builder.Entity().HasOne(s => s.User) .WithMany(e => e.Sessions) .HasForeignKey(e => e.UserId); builder.Entity().HasOne(s => s.Viking) .WithMany(e => e.Sessions) .HasForeignKey(e => e.VikingId); builder.Entity().HasMany(u => u.Sessions) .WithOne(e => e.User); builder.Entity().HasMany(u => u.Sessions) .WithOne(e => e.Viking); builder.Entity().HasOne(s => s.User) .WithMany(e => e.Vikings) .HasForeignKey(e => e.UserId); builder.Entity().HasOne(v => v.Inventory) .WithOne(e => e.Viking) .HasForeignKey(e => e.InventoryId); builder.Entity().HasMany(u => u.Vikings) .WithOne(e => e.User); builder.Entity().HasOne(s => s.Viking) .WithMany(e => e.Dragons) .HasForeignKey(e => e.VikingId); builder.Entity().HasMany(u => u.Dragons) .WithOne(e => e.Viking); builder.Entity().HasOne(s => s.SelectedDragon) .WithOne(e => e.SelectedViking) .HasForeignKey(e => e.SelectedVikingId); builder.Entity().HasOne(s => s.SelectedViking) .WithOne(e => e.SelectedDragon) .HasForeignKey(e => e.SelectedDragonId); builder.Entity().HasOne(s => s.Viking) .WithMany(e => e.Images) .HasForeignKey(e => e.VikingId); builder.Entity().HasMany(u => u.Images) .WithOne(e => e.Viking); builder.Entity().HasOne(v => v.Inventory) .WithOne(e => e.Viking); builder.Entity() .HasKey(e => e.Id); builder.Entity().HasMany(p => p.Pairs) .WithOne(e => e.PairData); builder.Entity() .HasOne(p => p.PairData) .WithMany(pd => pd.Pairs) .HasForeignKey(p => p.MasterId) .HasPrincipalKey(e => e.Id); builder.Entity().HasKey(e => new { e.Id, e.VikingId, e.MissionId }); builder.Entity() .HasOne(t => t.Viking) .WithMany(); builder.Entity().HasKey(e => e.Id); builder.Entity() .HasOne(i => i.Viking) .WithOne(e => e.Inventory) .HasForeignKey(e => e.VikingId); builder.Entity() .HasMany(i => i.InventoryItems) .WithOne(e => e.Inventory); builder.Entity() .HasOne(e => e.Inventory) .WithMany(e => e.InventoryItems) .HasForeignKey(e => e.InventoryId); } }