using ErsatzTV.Core.Domain; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace ErsatzTV.Infrastructure.Data.Configurations; public class ProgramScheduleAlternateConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("ProgramScheduleAlternate"); var intCollectionValueConverter = new ValueConverter, string>( i => string.Join(",", i), s => string.IsNullOrWhiteSpace(s) ? Array.Empty() : s.Split(new[] { ',' }).Select(int.Parse).ToArray()); var intCollectionValueComparer = new CollectionValueComparer(); builder.Property(t => t.DaysOfMonth) .HasConversion(intCollectionValueConverter) .Metadata.SetValueComparer(intCollectionValueComparer); builder.Property(t => t.MonthsOfYear) .HasConversion(intCollectionValueConverter) .Metadata.SetValueComparer(intCollectionValueComparer); builder.Property(t => t.DaysOfWeek) .HasConversion(new EnumCollectionJsonValueConverter()) .Metadata.SetValueComparer(new CollectionValueComparer()); } }