using Microsoft.EntityFrameworkCore; using InternshipSystem.Core; using InternshipSystem.Core.Entity.Internship; using InternshipSystem.Core.UglyOrmArtifacts; namespace InternshipSystem.Repository { public class InternshipDbContext : DbContext { public DbSet Companies { get; set; } public DbSet Editions { get; set; } public DbSet StaticPages { get; set; } public DbSet InternshipTypes { get; set; } public DbSet Students { get; set; } public InternshipDbContext(DbContextOptions options) : base(options) { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder .UseSnakeCaseNamingConvention(); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .OwnsOne(bo => bo.Address); modelBuilder.Entity() .OwnsOne(ir => ir.Mentor); modelBuilder.Entity(builder => { builder .HasKey(subject => new { InternshipProgramId = subject.InternshipRegistrationId, subject.InternshipSubjectId }); builder .HasOne(k => k.Registration) .WithMany(model => model.Subjects) .HasForeignKey(subject => subject.InternshipRegistrationId); builder .HasOne(k => k.Subject) .WithMany() .HasForeignKey(subject => subject.InternshipSubjectId); }); modelBuilder.Entity(builder => { builder .HasKey(subject => new { subject.EditionId, subject.InternshipSubjectId}); builder .HasOne(k => k.Edition) .WithMany(model => model.AvailableSubjects) .HasForeignKey(p => p.EditionId); builder .HasOne(k => k.Subject) .WithMany() .HasForeignKey(subject => subject.InternshipSubjectId); }); } } }