Files
BCSH1-TournamentApp/TournamentOrganizer/Database/TournamentContext.cs
T
2026-05-06 16:21:50 +02:00

72 lines
2.4 KiB
C#

using System;
using System.IO;
using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
using TournamentOrganizer.Models;
namespace TournamentOrganizer;
public class TournamentContext : DbContext
{
public DbSet<Event> Events { get; set; }
public DbSet<Game> Games { get; set; }
public DbSet<Match> Matches { get; set; }
public DbSet<TeamParticipant> TeamParticipants { get; set; }
public DbSet<PlayerParticipant> PlayerParticipants { get; set; }
public DbSet<Player> Players { get; set; }
public DbSet<Round> Rounds { get; set; }
public DbSet<Team> Teams { get; set; }
public DbSet<Tournament> Tournaments { get; set; }
public DbSet<TournamentTeam> TournamentTeams { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string datadir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "TournamentOrganizer");
Directory.CreateDirectory(datadir);
string dbfile = Path.Combine(datadir, "sqlite.db");
optionsBuilder.UseSqlite(new SqliteConnectionStringBuilder()
{
DataSource = dbfile,
Mode = SqliteOpenMode.ReadWriteCreate,
ForeignKeys = true,
RecursiveTriggers = true
}.ToString());
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Team>()
.HasOne(t => t.Leader)
.WithMany()
.HasForeignKey(t => t.LeaderId)
.OnDelete(DeleteBehavior.SetNull);
modelBuilder.Entity<TournamentTeam>()
.HasOne(tt => tt.Tournament)
.WithMany(t => t.TournamentTeams)
.HasForeignKey(tt => tt.TournamentId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<TournamentTeam>()
.HasOne(tt => tt.Team)
.WithMany(t => t.TournamentTeams)
.HasForeignKey(tt => tt.TeamId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<Match>()
.HasOne(m => m.WinnerMatch)
.WithMany()
.HasForeignKey(m => m.WinnerMatchId)
.OnDelete(DeleteBehavior.Restrict);
modelBuilder.Entity<Match>()
.HasOne(m => m.LoserMatch)
.WithMany()
.HasForeignKey(m => m.LoserMatchId)
.OnDelete(DeleteBehavior.Restrict);
}
}