2025-05-26 01:44:26 +02:00

55 lines
2.2 KiB
C#

using log4net;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
namespace SQLiteEF;
public class Context(DbContextOptions<Context> contextOptions) : DbContext(contextOptions)
{
public DbSet<Player> Players { get; set; }
public DbSet<Game> 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<Player>()
.HasMany<Game>(p => p.Games)
.WithMany(g => g.PlayedBy);
modelBuilder.Entity<Player>()
.Navigation(p => p.Games)
.AutoInclude(false);
modelBuilder.Entity<Player>()
.Navigation(p => p.TrackedTimes)
.AutoInclude(false);
modelBuilder.Entity<Game>()
.Navigation(g => g.PlayedBy)
.AutoInclude(false);
modelBuilder.Entity<Game>()
.Navigation(g => g.TrackedTimes)
.AutoInclude(false);
modelBuilder.Entity<TrackedTime>()
.HasOne<Player>(p => p.Player)
.WithMany(p => p.TrackedTimes)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<TrackedTime>()
.Navigation(t => t.Player)
.AutoInclude();
modelBuilder.Entity<TrackedTime>()
.HasOne<Game>(p => p.Game)
.WithMany(g => g.TrackedTimes)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<TrackedTime>()
.Navigation(t => t.Game)
.AutoInclude();
}
}