using lxc_songlist.Models; using Microsoft.EntityFrameworkCore; namespace lxc_songlist.Data; public sealed class SongListDbContext(DbContextOptions options) : DbContext(options) { public DbSet Songs => Set(); public DbSet Tags => Set(); public DbSet SongTags => Set(); public DbSet SiteSettings => Set(); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity(entity => { entity.Property(song => song.Title).HasMaxLength(200).IsRequired(); entity.Property(song => song.NormalizedTitle).HasMaxLength(200).IsRequired(); entity.HasIndex(song => song.NormalizedTitle).IsUnique(); }); modelBuilder.Entity(entity => { entity.Property(tag => tag.Name).HasMaxLength(50).IsRequired(); entity.Property(tag => tag.NormalizedName).HasMaxLength(50).IsRequired(); entity.HasIndex(tag => tag.NormalizedName).IsUnique(); }); modelBuilder.Entity(entity => { entity.HasKey(songTag => new { songTag.SongId, songTag.TagId }); entity .HasOne(songTag => songTag.Song) .WithMany(song => song.SongTags) .HasForeignKey(songTag => songTag.SongId) .OnDelete(DeleteBehavior.Cascade); entity .HasOne(songTag => songTag.Tag) .WithMany(tag => tag.SongTags) .HasForeignKey(songTag => songTag.TagId) .OnDelete(DeleteBehavior.Cascade); }); modelBuilder.Entity(entity => { entity.HasKey(setting => setting.Key); entity.Property(setting => setting.Key).HasMaxLength(80); entity.Property(setting => setting.Value).HasMaxLength(500); }); } }