55 lines
2.2 KiB
C#
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();
|
|
}
|
|
} |