using ErsatzTV.Core.Domain; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace ErsatzTV.Infrastructure.Data.Configurations; public class PlayoutItemConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("PlayoutItem"); builder.HasIndex(p => new { p.Start, p.Finish }) .HasDatabaseName("IX_PlayoutItem_Start_Finish"); builder.HasOne(pi => pi.MediaItem) .WithMany() .HasForeignKey(pi => pi.MediaItemId) .OnDelete(DeleteBehavior.Cascade); builder.HasMany(c => c.Watermarks) .WithMany(m => m.PlayoutItems) .UsingEntity( j => j.HasOne(ci => ci.Watermark) .WithMany(mi => mi.PlayoutItemWatermarks) .HasForeignKey(ci => ci.WatermarkId) .OnDelete(DeleteBehavior.Cascade), j => j.HasOne(ci => ci.PlayoutItem) .WithMany(c => c.PlayoutItemWatermarks) .HasForeignKey(ci => ci.PlayoutItemId) .OnDelete(DeleteBehavior.Cascade), j => j.HasKey(ci => new { ci.PlayoutItemId, ci.WatermarkId })); builder.HasMany(c => c.GraphicsElements) .WithMany(m => m.PlayoutItems) .UsingEntity( j => j.HasOne(ci => ci.GraphicsElement) .WithMany(mi => mi.PlayoutItemGraphicsElements) .HasForeignKey(ci => ci.GraphicsElementId) .OnDelete(DeleteBehavior.Cascade), j => j.HasOne(ci => ci.PlayoutItem) .WithMany(c => c.PlayoutItemGraphicsElements) .HasForeignKey(ci => ci.PlayoutItemId) .OnDelete(DeleteBehavior.Cascade), j => j.HasKey(ci => new { ci.PlayoutItemId, ci.GraphicsElementId })); } }