using System.Reflection; using Core.Entities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace Data { public class AppDbContext : DbContext { public DbSet Events { get; set; } public DbSet Students { get; set; } public DbSet Teams { get; set; } public DbSet StudentEventRanking { get; set; } public AppDbContext() { } public AppDbContext(DbContextOptions options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly()); } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { var dbPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ChapterOrganizer.db"); optionsBuilder.UseSqlite($"Data Source={dbPath}"); } } public class EventDefinitionConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasKey(u => u.Id); builder.HasIndex(u => u.Name); builder.Property(u => u.Name).HasMaxLength(128); //builder.HasMany(u => u.Roles) // .WithOne() // .HasForeignKey(r => r.Id) // .OnDelete(DeleteBehavior.Restrict); } } public class StudentConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasKey(u => u.Id); //builder.Property(s => s.Grade); builder .HasMany(e => e.RankedEvents) .WithMany() .UsingEntity() .HasOne(e => e.EventDefinition); } } public class TeamConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasKey(u => u.Id); builder.HasMany(e => e.Students) .WithMany(e => e.Teams); builder.HasOne(e => e.Captain); } } public class StudentEventRankingConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { //builder.HasKey(u => u.EventDefinitionId); //builder.HasKey(u => u.StudentId); } } }