diff --git a/ErsatzTV.Infrastructure/Data/Repositories/MediaCollectionRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/MediaCollectionRepository.cs
index 33b8f7cf2..f28f7fd46 100644
--- a/ErsatzTV.Infrastructure/Data/Repositories/MediaCollectionRepository.cs
+++ b/ErsatzTV.Infrastructure/Data/Repositories/MediaCollectionRepository.cs
@@ -174,6 +174,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
return await _dbContext.Episodes
.Include(e => e.EpisodeMetadata)
.Include(e => e.MediaVersions)
+ .Include(e => e.Season)
.Filter(e => ids.Contains(e.Id))
.ToListAsync();
}
@@ -190,6 +191,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
return await _dbContext.Episodes
.Include(e => e.EpisodeMetadata)
.Include(e => e.MediaVersions)
+ .Include(e => e.Season)
.Filter(e => ids.Contains(e.Id))
.ToListAsync();
}
@@ -205,6 +207,7 @@ namespace ErsatzTV.Infrastructure.Data.Repositories
return await _dbContext.Episodes
.Include(e => e.EpisodeMetadata)
.Include(e => e.MediaVersions)
+ .Include(e => e.Season)
.Filter(e => ids.Contains(e.Id))
.ToListAsync();
}
diff --git a/ErsatzTV.Infrastructure/Migrations/20210228193102_RebuildAllPlayoutsUtc.Designer.cs b/ErsatzTV.Infrastructure/Migrations/20210228193102_RebuildAllPlayoutsUtc.Designer.cs
new file mode 100644
index 000000000..6764a5811
--- /dev/null
+++ b/ErsatzTV.Infrastructure/Migrations/20210228193102_RebuildAllPlayoutsUtc.Designer.cs
@@ -0,0 +1,1471 @@
+//
+using System;
+using ErsatzTV.Infrastructure.Data;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+namespace ErsatzTV.Infrastructure.Migrations
+{
+ [DbContext(typeof(TvContext))]
+ [Migration("20210228193102_RebuildAllPlayoutsUtc")]
+ partial class RebuildAllPlayoutsUtc
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "5.0.3");
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Artwork", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("ArtworkKind")
+ .HasColumnType("INTEGER");
+
+ b.Property("ChannelId")
+ .HasColumnType("INTEGER");
+
+ b.Property("DateAdded")
+ .HasColumnType("TEXT");
+
+ b.Property("DateUpdated")
+ .HasColumnType("TEXT");
+
+ b.Property("EpisodeMetadataId")
+ .HasColumnType("INTEGER");
+
+ b.Property("MovieMetadataId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Path")
+ .HasColumnType("TEXT");
+
+ b.Property("SeasonMetadataId")
+ .HasColumnType("INTEGER");
+
+ b.Property("ShowMetadataId")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ChannelId");
+
+ b.HasIndex("EpisodeMetadataId");
+
+ b.HasIndex("MovieMetadataId");
+
+ b.HasIndex("SeasonMetadataId");
+
+ b.HasIndex("ShowMetadataId");
+
+ b.ToTable("Artwork");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Channel", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("FFmpegProfileId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Name")
+ .HasColumnType("TEXT");
+
+ b.Property("Number")
+ .HasColumnType("INTEGER");
+
+ b.Property("StreamingMode")
+ .HasColumnType("INTEGER");
+
+ b.Property("UniqueId")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("FFmpegProfileId");
+
+ b.HasIndex("Number")
+ .IsUnique();
+
+ b.ToTable("Channel");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Collection", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("Name")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.ToTable("Collection");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.CollectionItem", b =>
+ {
+ b.Property("CollectionId")
+ .HasColumnType("INTEGER");
+
+ b.Property("MediaItemId")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("CollectionId", "MediaItemId");
+
+ b.HasIndex("MediaItemId");
+
+ b.ToTable("CollectionItem");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.ConfigElement", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("Key")
+ .HasColumnType("TEXT");
+
+ b.Property("Value")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Key")
+ .IsUnique();
+
+ b.ToTable("ConfigElement");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.EpisodeMetadata", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("DateAdded")
+ .HasColumnType("TEXT");
+
+ b.Property("DateUpdated")
+ .HasColumnType("TEXT");
+
+ b.Property("EpisodeId")
+ .HasColumnType("INTEGER");
+
+ b.Property("MetadataKind")
+ .HasColumnType("INTEGER");
+
+ b.Property("OriginalTitle")
+ .HasColumnType("TEXT");
+
+ b.Property("Outline")
+ .HasColumnType("TEXT");
+
+ b.Property("Plot")
+ .HasColumnType("TEXT");
+
+ b.Property("ReleaseDate")
+ .HasColumnType("TEXT");
+
+ b.Property("SortTitle")
+ .HasColumnType("TEXT");
+
+ b.Property("Tagline")
+ .HasColumnType("TEXT");
+
+ b.Property("Title")
+ .HasColumnType("TEXT");
+
+ b.Property("Year")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EpisodeId");
+
+ b.ToTable("EpisodeMetadata");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.FFmpegProfile", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("AudioBitrate")
+ .HasColumnType("INTEGER");
+
+ b.Property("AudioBufferSize")
+ .HasColumnType("INTEGER");
+
+ b.Property("AudioChannels")
+ .HasColumnType("INTEGER");
+
+ b.Property("AudioCodec")
+ .HasColumnType("TEXT");
+
+ b.Property("AudioSampleRate")
+ .HasColumnType("INTEGER");
+
+ b.Property("AudioVolume")
+ .HasColumnType("INTEGER");
+
+ b.Property("Name")
+ .HasColumnType("TEXT");
+
+ b.Property("NormalizeAudio")
+ .HasColumnType("INTEGER");
+
+ b.Property("NormalizeAudioCodec")
+ .HasColumnType("INTEGER");
+
+ b.Property("NormalizeResolution")
+ .HasColumnType("INTEGER");
+
+ b.Property("NormalizeVideoCodec")
+ .HasColumnType("INTEGER");
+
+ b.Property("ResolutionId")
+ .HasColumnType("INTEGER");
+
+ b.Property("ThreadCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("Transcode")
+ .HasColumnType("INTEGER");
+
+ b.Property("VideoBitrate")
+ .HasColumnType("INTEGER");
+
+ b.Property("VideoBufferSize")
+ .HasColumnType("INTEGER");
+
+ b.Property("VideoCodec")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ResolutionId");
+
+ b.ToTable("FFmpegProfile");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Library", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("LastScan")
+ .HasColumnType("TEXT");
+
+ b.Property("MediaKind")
+ .HasColumnType("INTEGER");
+
+ b.Property("MediaSourceId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Name")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("MediaSourceId");
+
+ b.ToTable("Library");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.LibraryPath", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("LibraryId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Path")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("LibraryId");
+
+ b.ToTable("LibraryPath");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.MediaFile", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("MediaVersionId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Path")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("MediaVersionId");
+
+ b.HasIndex("Path")
+ .IsUnique();
+
+ b.ToTable("MediaFile");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.MediaItem", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("LibraryPathId")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.HasIndex("LibraryPathId");
+
+ b.ToTable("MediaItem");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.MediaSource", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.ToTable("MediaSource");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.MediaVersion", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("AudioCodec")
+ .HasColumnType("TEXT");
+
+ b.Property("DateAdded")
+ .HasColumnType("TEXT");
+
+ b.Property("DateUpdated")
+ .HasColumnType("TEXT");
+
+ b.Property("DisplayAspectRatio")
+ .HasColumnType("TEXT");
+
+ b.Property("Duration")
+ .HasColumnType("TEXT");
+
+ b.Property("EpisodeId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Height")
+ .HasColumnType("INTEGER");
+
+ b.Property("MovieId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Name")
+ .HasColumnType("TEXT");
+
+ b.Property("SampleAspectRatio")
+ .HasColumnType("TEXT");
+
+ b.Property("VideoCodec")
+ .HasColumnType("TEXT");
+
+ b.Property("VideoScanKind")
+ .HasColumnType("INTEGER");
+
+ b.Property("Width")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EpisodeId");
+
+ b.HasIndex("MovieId");
+
+ b.ToTable("MediaVersion");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.MovieMetadata", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("DateAdded")
+ .HasColumnType("TEXT");
+
+ b.Property("DateUpdated")
+ .HasColumnType("TEXT");
+
+ b.Property("MetadataKind")
+ .HasColumnType("INTEGER");
+
+ b.Property("MovieId")
+ .HasColumnType("INTEGER");
+
+ b.Property("OriginalTitle")
+ .HasColumnType("TEXT");
+
+ b.Property("Outline")
+ .HasColumnType("TEXT");
+
+ b.Property("Plot")
+ .HasColumnType("TEXT");
+
+ b.Property("ReleaseDate")
+ .HasColumnType("TEXT");
+
+ b.Property("SortTitle")
+ .HasColumnType("TEXT");
+
+ b.Property("Tagline")
+ .HasColumnType("TEXT");
+
+ b.Property("Title")
+ .HasColumnType("TEXT");
+
+ b.Property("Year")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.HasIndex("MovieId");
+
+ b.ToTable("MovieMetadata");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Playout", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("ChannelId")
+ .HasColumnType("INTEGER");
+
+ b.Property("ProgramScheduleId")
+ .HasColumnType("INTEGER");
+
+ b.Property("ProgramSchedulePlayoutType")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ChannelId");
+
+ b.HasIndex("ProgramScheduleId");
+
+ b.ToTable("Playout");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.PlayoutItem", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("Finish")
+ .HasColumnType("TEXT");
+
+ b.Property("MediaItemId")
+ .HasColumnType("INTEGER");
+
+ b.Property("PlayoutId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Start")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("MediaItemId");
+
+ b.HasIndex("PlayoutId");
+
+ b.ToTable("PlayoutItem");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.PlayoutProgramScheduleAnchor", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("CollectionId")
+ .HasColumnType("INTEGER");
+
+ b.Property("CollectionType")
+ .HasColumnType("INTEGER");
+
+ b.Property("MediaItemId")
+ .HasColumnType("INTEGER");
+
+ b.Property("PlayoutId")
+ .HasColumnType("INTEGER");
+
+ b.Property("ProgramScheduleId")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CollectionId");
+
+ b.HasIndex("MediaItemId");
+
+ b.HasIndex("PlayoutId");
+
+ b.HasIndex("ProgramScheduleId");
+
+ b.ToTable("PlayoutProgramScheduleAnchor");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.PlexConnection", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("IsActive")
+ .HasColumnType("INTEGER");
+
+ b.Property("PlexMediaSourceId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Uri")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("PlexMediaSourceId");
+
+ b.ToTable("PlexConnection");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.PlexMediaItemPart", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("Duration")
+ .HasColumnType("INTEGER");
+
+ b.Property("File")
+ .HasColumnType("TEXT");
+
+ b.Property("Key")
+ .HasColumnType("TEXT");
+
+ b.Property("PlexId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Size")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.ToTable("PlexMediaItemPart");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.ProgramSchedule", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("MediaCollectionPlaybackOrder")
+ .HasColumnType("INTEGER");
+
+ b.Property("Name")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Name")
+ .IsUnique();
+
+ b.ToTable("ProgramSchedule");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.ProgramScheduleItem", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("CollectionId")
+ .HasColumnType("INTEGER");
+
+ b.Property("CollectionType")
+ .HasColumnType("INTEGER");
+
+ b.Property("Index")
+ .HasColumnType("INTEGER");
+
+ b.Property("MediaItemId")
+ .HasColumnType("INTEGER");
+
+ b.Property("ProgramScheduleId")
+ .HasColumnType("INTEGER");
+
+ b.Property("StartTime")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CollectionId");
+
+ b.HasIndex("MediaItemId");
+
+ b.HasIndex("ProgramScheduleId");
+
+ b.ToTable("ProgramScheduleItem");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Resolution", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("Height")
+ .HasColumnType("INTEGER");
+
+ b.Property("Name")
+ .HasColumnType("TEXT");
+
+ b.Property("Width")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.ToTable("Resolution");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.SeasonMetadata", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("DateAdded")
+ .HasColumnType("TEXT");
+
+ b.Property("DateUpdated")
+ .HasColumnType("TEXT");
+
+ b.Property("MetadataKind")
+ .HasColumnType("INTEGER");
+
+ b.Property("OriginalTitle")
+ .HasColumnType("TEXT");
+
+ b.Property("Outline")
+ .HasColumnType("TEXT");
+
+ b.Property("ReleaseDate")
+ .HasColumnType("TEXT");
+
+ b.Property("SeasonId")
+ .HasColumnType("INTEGER");
+
+ b.Property("SortTitle")
+ .HasColumnType("TEXT");
+
+ b.Property("Title")
+ .HasColumnType("TEXT");
+
+ b.Property("Year")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.HasIndex("SeasonId");
+
+ b.ToTable("SeasonMetadata");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.ShowMetadata", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("DateAdded")
+ .HasColumnType("TEXT");
+
+ b.Property("DateUpdated")
+ .HasColumnType("TEXT");
+
+ b.Property("MetadataKind")
+ .HasColumnType("INTEGER");
+
+ b.Property("OriginalTitle")
+ .HasColumnType("TEXT");
+
+ b.Property("Outline")
+ .HasColumnType("TEXT");
+
+ b.Property("Plot")
+ .HasColumnType("TEXT");
+
+ b.Property("ReleaseDate")
+ .HasColumnType("TEXT");
+
+ b.Property("ShowId")
+ .HasColumnType("INTEGER");
+
+ b.Property("SortTitle")
+ .HasColumnType("TEXT");
+
+ b.Property("Tagline")
+ .HasColumnType("TEXT");
+
+ b.Property("Title")
+ .HasColumnType("TEXT");
+
+ b.Property("Year")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ShowId");
+
+ b.ToTable("ShowMetadata");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.LocalLibrary", b =>
+ {
+ b.HasBaseType("ErsatzTV.Core.Domain.Library");
+
+ b.ToTable("LocalLibrary");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.PlexLibrary", b =>
+ {
+ b.HasBaseType("ErsatzTV.Core.Domain.Library");
+
+ b.Property("Key")
+ .HasColumnType("TEXT");
+
+ b.Property("ShouldSyncItems")
+ .HasColumnType("INTEGER");
+
+ b.ToTable("PlexLibrary");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Episode", b =>
+ {
+ b.HasBaseType("ErsatzTV.Core.Domain.MediaItem");
+
+ b.Property("EpisodeNumber")
+ .HasColumnType("INTEGER");
+
+ b.Property("SeasonId")
+ .HasColumnType("INTEGER");
+
+ b.HasIndex("SeasonId");
+
+ b.ToTable("Episode");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Movie", b =>
+ {
+ b.HasBaseType("ErsatzTV.Core.Domain.MediaItem");
+
+ b.ToTable("Movie");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Season", b =>
+ {
+ b.HasBaseType("ErsatzTV.Core.Domain.MediaItem");
+
+ b.Property("SeasonNumber")
+ .HasColumnType("INTEGER");
+
+ b.Property("ShowId")
+ .HasColumnType("INTEGER");
+
+ b.HasIndex("ShowId");
+
+ b.ToTable("Season");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Show", b =>
+ {
+ b.HasBaseType("ErsatzTV.Core.Domain.MediaItem");
+
+ b.ToTable("Show");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.LocalMediaSource", b =>
+ {
+ b.HasBaseType("ErsatzTV.Core.Domain.MediaSource");
+
+ b.ToTable("LocalMediaSource");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.PlexMediaSource", b =>
+ {
+ b.HasBaseType("ErsatzTV.Core.Domain.MediaSource");
+
+ b.Property("ClientIdentifier")
+ .HasColumnType("TEXT");
+
+ b.Property("ProductVersion")
+ .HasColumnType("TEXT");
+
+ b.Property("ServerName")
+ .HasColumnType("TEXT");
+
+ b.ToTable("PlexMediaSource");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.ProgramScheduleItemDuration", b =>
+ {
+ b.HasBaseType("ErsatzTV.Core.Domain.ProgramScheduleItem");
+
+ b.Property("OfflineTail")
+ .HasColumnType("INTEGER");
+
+ b.Property("PlayoutDuration")
+ .HasColumnType("TEXT");
+
+ b.ToTable("ProgramScheduleDurationItem");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.ProgramScheduleItemFlood", b =>
+ {
+ b.HasBaseType("ErsatzTV.Core.Domain.ProgramScheduleItem");
+
+ b.ToTable("ProgramScheduleFloodItem");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.ProgramScheduleItemMultiple", b =>
+ {
+ b.HasBaseType("ErsatzTV.Core.Domain.ProgramScheduleItem");
+
+ b.Property("Count")
+ .HasColumnType("INTEGER");
+
+ b.ToTable("ProgramScheduleMultipleItem");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.ProgramScheduleItemOne", b =>
+ {
+ b.HasBaseType("ErsatzTV.Core.Domain.ProgramScheduleItem");
+
+ b.ToTable("ProgramScheduleOneItem");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.PlexMovie", b =>
+ {
+ b.HasBaseType("ErsatzTV.Core.Domain.Movie");
+
+ b.Property("Key")
+ .HasColumnType("TEXT");
+
+ b.Property("PartId")
+ .HasColumnType("INTEGER");
+
+ b.HasIndex("PartId");
+
+ b.ToTable("PlexMovie");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Artwork", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.Channel", null)
+ .WithMany("Artwork")
+ .HasForeignKey("ChannelId")
+ .OnDelete(DeleteBehavior.Cascade);
+
+ b.HasOne("ErsatzTV.Core.Domain.EpisodeMetadata", null)
+ .WithMany("Artwork")
+ .HasForeignKey("EpisodeMetadataId")
+ .OnDelete(DeleteBehavior.Cascade);
+
+ b.HasOne("ErsatzTV.Core.Domain.MovieMetadata", null)
+ .WithMany("Artwork")
+ .HasForeignKey("MovieMetadataId")
+ .OnDelete(DeleteBehavior.Cascade);
+
+ b.HasOne("ErsatzTV.Core.Domain.SeasonMetadata", null)
+ .WithMany("Artwork")
+ .HasForeignKey("SeasonMetadataId")
+ .OnDelete(DeleteBehavior.Cascade);
+
+ b.HasOne("ErsatzTV.Core.Domain.ShowMetadata", null)
+ .WithMany("Artwork")
+ .HasForeignKey("ShowMetadataId")
+ .OnDelete(DeleteBehavior.Cascade);
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Channel", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.FFmpegProfile", "FFmpegProfile")
+ .WithMany()
+ .HasForeignKey("FFmpegProfileId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("FFmpegProfile");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.CollectionItem", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.Collection", "Collection")
+ .WithMany("CollectionItems")
+ .HasForeignKey("CollectionId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("ErsatzTV.Core.Domain.MediaItem", "MediaItem")
+ .WithMany("CollectionItems")
+ .HasForeignKey("MediaItemId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Collection");
+
+ b.Navigation("MediaItem");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.EpisodeMetadata", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.Episode", "Episode")
+ .WithMany("EpisodeMetadata")
+ .HasForeignKey("EpisodeId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Episode");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.FFmpegProfile", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.Resolution", "Resolution")
+ .WithMany()
+ .HasForeignKey("ResolutionId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Resolution");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Library", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.MediaSource", "MediaSource")
+ .WithMany("Libraries")
+ .HasForeignKey("MediaSourceId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("MediaSource");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.LibraryPath", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.Library", "Library")
+ .WithMany("Paths")
+ .HasForeignKey("LibraryId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Library");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.MediaFile", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.MediaVersion", "MediaVersion")
+ .WithMany("MediaFiles")
+ .HasForeignKey("MediaVersionId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("MediaVersion");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.MediaItem", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.LibraryPath", "LibraryPath")
+ .WithMany("MediaItems")
+ .HasForeignKey("LibraryPathId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("LibraryPath");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.MediaVersion", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.Episode", null)
+ .WithMany("MediaVersions")
+ .HasForeignKey("EpisodeId")
+ .OnDelete(DeleteBehavior.Cascade);
+
+ b.HasOne("ErsatzTV.Core.Domain.Movie", null)
+ .WithMany("MediaVersions")
+ .HasForeignKey("MovieId")
+ .OnDelete(DeleteBehavior.Cascade);
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.MovieMetadata", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.Movie", "Movie")
+ .WithMany("MovieMetadata")
+ .HasForeignKey("MovieId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Movie");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Playout", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.Channel", "Channel")
+ .WithMany("Playouts")
+ .HasForeignKey("ChannelId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("ErsatzTV.Core.Domain.ProgramSchedule", "ProgramSchedule")
+ .WithMany("Playouts")
+ .HasForeignKey("ProgramScheduleId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.OwnsOne("ErsatzTV.Core.Domain.PlayoutAnchor", "Anchor", b1 =>
+ {
+ b1.Property("PlayoutId")
+ .HasColumnType("INTEGER");
+
+ b1.Property("NextScheduleItemId")
+ .HasColumnType("INTEGER");
+
+ b1.Property("NextStart")
+ .HasColumnType("TEXT");
+
+ b1.HasKey("PlayoutId");
+
+ b1.HasIndex("NextScheduleItemId");
+
+ b1.ToTable("Playout");
+
+ b1.HasOne("ErsatzTV.Core.Domain.ProgramScheduleItem", "NextScheduleItem")
+ .WithMany()
+ .HasForeignKey("NextScheduleItemId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b1.WithOwner()
+ .HasForeignKey("PlayoutId");
+
+ b1.Navigation("NextScheduleItem");
+ });
+
+ b.Navigation("Anchor");
+
+ b.Navigation("Channel");
+
+ b.Navigation("ProgramSchedule");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.PlayoutItem", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.MediaItem", "MediaItem")
+ .WithMany()
+ .HasForeignKey("MediaItemId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("ErsatzTV.Core.Domain.Playout", "Playout")
+ .WithMany("Items")
+ .HasForeignKey("PlayoutId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("MediaItem");
+
+ b.Navigation("Playout");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.PlayoutProgramScheduleAnchor", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.Collection", "Collection")
+ .WithMany()
+ .HasForeignKey("CollectionId")
+ .OnDelete(DeleteBehavior.Cascade);
+
+ b.HasOne("ErsatzTV.Core.Domain.MediaItem", "MediaItem")
+ .WithMany()
+ .HasForeignKey("MediaItemId")
+ .OnDelete(DeleteBehavior.Cascade);
+
+ b.HasOne("ErsatzTV.Core.Domain.Playout", "Playout")
+ .WithMany("ProgramScheduleAnchors")
+ .HasForeignKey("PlayoutId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("ErsatzTV.Core.Domain.ProgramSchedule", "ProgramSchedule")
+ .WithMany()
+ .HasForeignKey("ProgramScheduleId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.OwnsOne("ErsatzTV.Core.Domain.CollectionEnumeratorState", "EnumeratorState", b1 =>
+ {
+ b1.Property("PlayoutProgramScheduleAnchorId")
+ .HasColumnType("INTEGER");
+
+ b1.Property("Index")
+ .HasColumnType("INTEGER");
+
+ b1.Property("Seed")
+ .HasColumnType("INTEGER");
+
+ b1.HasKey("PlayoutProgramScheduleAnchorId");
+
+ b1.ToTable("PlayoutProgramScheduleAnchor");
+
+ b1.WithOwner()
+ .HasForeignKey("PlayoutProgramScheduleAnchorId");
+ });
+
+ b.Navigation("Collection");
+
+ b.Navigation("EnumeratorState");
+
+ b.Navigation("MediaItem");
+
+ b.Navigation("Playout");
+
+ b.Navigation("ProgramSchedule");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.PlexConnection", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.PlexMediaSource", "PlexMediaSource")
+ .WithMany("Connections")
+ .HasForeignKey("PlexMediaSourceId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("PlexMediaSource");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.ProgramScheduleItem", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.Collection", "Collection")
+ .WithMany()
+ .HasForeignKey("CollectionId")
+ .OnDelete(DeleteBehavior.Cascade);
+
+ b.HasOne("ErsatzTV.Core.Domain.MediaItem", "MediaItem")
+ .WithMany()
+ .HasForeignKey("MediaItemId")
+ .OnDelete(DeleteBehavior.Cascade);
+
+ b.HasOne("ErsatzTV.Core.Domain.ProgramSchedule", "ProgramSchedule")
+ .WithMany("Items")
+ .HasForeignKey("ProgramScheduleId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Collection");
+
+ b.Navigation("MediaItem");
+
+ b.Navigation("ProgramSchedule");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.SeasonMetadata", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.Season", "Season")
+ .WithMany("SeasonMetadata")
+ .HasForeignKey("SeasonId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Season");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.ShowMetadata", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.Show", "Show")
+ .WithMany("ShowMetadata")
+ .HasForeignKey("ShowId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Show");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.LocalLibrary", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.Library", null)
+ .WithOne()
+ .HasForeignKey("ErsatzTV.Core.Domain.LocalLibrary", "Id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.PlexLibrary", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.Library", null)
+ .WithOne()
+ .HasForeignKey("ErsatzTV.Core.Domain.PlexLibrary", "Id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Episode", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.MediaItem", null)
+ .WithOne()
+ .HasForeignKey("ErsatzTV.Core.Domain.Episode", "Id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("ErsatzTV.Core.Domain.Season", "Season")
+ .WithMany("Episodes")
+ .HasForeignKey("SeasonId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Season");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Movie", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.MediaItem", null)
+ .WithOne()
+ .HasForeignKey("ErsatzTV.Core.Domain.Movie", "Id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Season", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.MediaItem", null)
+ .WithOne()
+ .HasForeignKey("ErsatzTV.Core.Domain.Season", "Id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("ErsatzTV.Core.Domain.Show", "Show")
+ .WithMany("Seasons")
+ .HasForeignKey("ShowId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Show");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Show", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.MediaItem", null)
+ .WithOne()
+ .HasForeignKey("ErsatzTV.Core.Domain.Show", "Id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.LocalMediaSource", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.MediaSource", null)
+ .WithOne()
+ .HasForeignKey("ErsatzTV.Core.Domain.LocalMediaSource", "Id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.PlexMediaSource", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.MediaSource", null)
+ .WithOne()
+ .HasForeignKey("ErsatzTV.Core.Domain.PlexMediaSource", "Id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.ProgramScheduleItemDuration", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.ProgramScheduleItem", null)
+ .WithOne()
+ .HasForeignKey("ErsatzTV.Core.Domain.ProgramScheduleItemDuration", "Id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.ProgramScheduleItemFlood", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.ProgramScheduleItem", null)
+ .WithOne()
+ .HasForeignKey("ErsatzTV.Core.Domain.ProgramScheduleItemFlood", "Id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.ProgramScheduleItemMultiple", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.ProgramScheduleItem", null)
+ .WithOne()
+ .HasForeignKey("ErsatzTV.Core.Domain.ProgramScheduleItemMultiple", "Id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.ProgramScheduleItemOne", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.ProgramScheduleItem", null)
+ .WithOne()
+ .HasForeignKey("ErsatzTV.Core.Domain.ProgramScheduleItemOne", "Id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.PlexMovie", b =>
+ {
+ b.HasOne("ErsatzTV.Core.Domain.Movie", null)
+ .WithOne()
+ .HasForeignKey("ErsatzTV.Core.Domain.PlexMovie", "Id")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("ErsatzTV.Core.Domain.PlexMediaItemPart", "Part")
+ .WithMany()
+ .HasForeignKey("PartId");
+
+ b.Navigation("Part");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Channel", b =>
+ {
+ b.Navigation("Artwork");
+
+ b.Navigation("Playouts");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Collection", b =>
+ {
+ b.Navigation("CollectionItems");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.EpisodeMetadata", b =>
+ {
+ b.Navigation("Artwork");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Library", b =>
+ {
+ b.Navigation("Paths");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.LibraryPath", b =>
+ {
+ b.Navigation("MediaItems");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.MediaItem", b =>
+ {
+ b.Navigation("CollectionItems");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.MediaSource", b =>
+ {
+ b.Navigation("Libraries");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.MediaVersion", b =>
+ {
+ b.Navigation("MediaFiles");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.MovieMetadata", b =>
+ {
+ b.Navigation("Artwork");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Playout", b =>
+ {
+ b.Navigation("Items");
+
+ b.Navigation("ProgramScheduleAnchors");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.ProgramSchedule", b =>
+ {
+ b.Navigation("Items");
+
+ b.Navigation("Playouts");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.SeasonMetadata", b =>
+ {
+ b.Navigation("Artwork");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.ShowMetadata", b =>
+ {
+ b.Navigation("Artwork");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Episode", b =>
+ {
+ b.Navigation("EpisodeMetadata");
+
+ b.Navigation("MediaVersions");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Movie", b =>
+ {
+ b.Navigation("MediaVersions");
+
+ b.Navigation("MovieMetadata");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Season", b =>
+ {
+ b.Navigation("Episodes");
+
+ b.Navigation("SeasonMetadata");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.Show", b =>
+ {
+ b.Navigation("Seasons");
+
+ b.Navigation("ShowMetadata");
+ });
+
+ modelBuilder.Entity("ErsatzTV.Core.Domain.PlexMediaSource", b =>
+ {
+ b.Navigation("Connections");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/ErsatzTV.Infrastructure/Migrations/20210228193102_RebuildAllPlayoutsUtc.cs b/ErsatzTV.Infrastructure/Migrations/20210228193102_RebuildAllPlayoutsUtc.cs
new file mode 100644
index 000000000..47fe3a6e4
--- /dev/null
+++ b/ErsatzTV.Infrastructure/Migrations/20210228193102_RebuildAllPlayoutsUtc.cs
@@ -0,0 +1,18 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace ErsatzTV.Infrastructure.Migrations
+{
+ public partial class RebuildAllPlayoutsUtc : Migration
+ {
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.Sql(@"DELETE FROM PlayoutItem");
+ migrationBuilder.Sql(@"DELETE FROM PlayoutProgramScheduleAnchor");
+ migrationBuilder.Sql(@"UPDATE Playout SET Anchor_NextStart = null, Anchor_NextScheduleItemId = null");
+ }
+
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ }
+ }
+}