using log4net; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; namespace SQLiteEF; public class Context(DbContextOptions contextOptions) : DbContext(contextOptions) { public DbSet Players { get; set; } public DbSet Games { get; set; } private ILog Log { get; } = LogManager.GetLogger(typeof(Context)); protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.EnableDetailedErrors().EnableSensitiveDataLogging(); optionsBuilder.LogTo(s => Log.Debug(s), (_, level) => level <= LogLevel.Debug); optionsBuilder.LogTo(s => Log.Info(s), (_, level) => level == LogLevel.Information); optionsBuilder.LogTo(s => Log.Warn(s), (_, level) => level == LogLevel.Warning); optionsBuilder.LogTo(s => Log.Error(s), (_, level) => level == LogLevel.Error); optionsBuilder.LogTo(s => Log.Fatal(s), (_, level) => level >= LogLevel.Critical); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .HasMany(p => p.Games) .WithMany(g => g.PlayedBy); modelBuilder.Entity() .Navigation(p => p.Games) .AutoInclude(false); modelBuilder.Entity() .Navigation(p => p.TrackedTimes) .AutoInclude(false); modelBuilder.Entity() .Navigation(g => g.PlayedBy) .AutoInclude(false); modelBuilder.Entity() .Navigation(g => g.TrackedTimes) .AutoInclude(false); modelBuilder.Entity() .HasOne(p => p.Player) .WithMany(p => p.TrackedTimes) .OnDelete(DeleteBehavior.Cascade); modelBuilder.Entity() .Navigation(t => t.Player) .AutoInclude(); modelBuilder.Entity() .HasOne(p => p.Game) .WithMany(g => g.TrackedTimes) .OnDelete(DeleteBehavior.Cascade); modelBuilder.Entity() .Navigation(t => t.Game) .AutoInclude(); } }