diff --git a/Kyoo.Common/Models/Episode.cs b/Kyoo.Common/Models/Episode.cs index 9106b0f9..9607f201 100644 --- a/Kyoo.Common/Models/Episode.cs +++ b/Kyoo.Common/Models/Episode.cs @@ -1,7 +1,6 @@ using Newtonsoft.Json; using System; using System.Collections.Generic; -using System.Linq; namespace Kyoo.Models { @@ -24,7 +23,7 @@ namespace Kyoo.Models public long Runtime { get; set; } //This runtime variable should be in minutes [JsonIgnore] public string ImgPrimary { get; set; } - public string ExternalIDs { get; set; } + public virtual IEnumerable ExternalIDs { get; set; } [JsonIgnore] public virtual IEnumerable Tracks { get; set; } @@ -33,14 +32,17 @@ namespace Kyoo.Models public string Thumb; //Used in the API response only - public Episode() - { - SeasonNumber = -1; - EpisodeNumber = -1; - AbsoluteNumber = -1; - } + public Episode() { } - public Episode(long seasonNumber, long episodeNumber, long absoluteNumber, string title, string overview, DateTime? releaseDate, long runtime, string imgPrimary, string externalIDs) + public Episode(long seasonNumber, + long episodeNumber, + long absoluteNumber, + string title, + string overview, + DateTime? releaseDate, + long runtime, + string imgPrimary, + IEnumerable externalIDs) { SeasonNumber = seasonNumber; EpisodeNumber = episodeNumber; @@ -53,7 +55,18 @@ namespace Kyoo.Models ExternalIDs = externalIDs; } - public Episode(long showID, long seasonID, long seasonNumber, long episodeNumber, long absoluteNumber, string path, string title, string overview, DateTime? releaseDate, long runtime, string imgPrimary, string externalIDs) + public Episode(long showID, + long seasonID, + long seasonNumber, + long episodeNumber, + long absoluteNumber, + string path, + string title, + string overview, + DateTime? releaseDate, + long runtime, + string imgPrimary, + IEnumerable externalIDs) { ShowID = showID; SeasonID = seasonID; @@ -111,7 +124,8 @@ namespace Kyoo.Models if (Runtime == -1) Runtime = other.Runtime; ImgPrimary ??= other.ImgPrimary; - ExternalIDs = string.Join('|', new [] { ExternalIDs, other.ExternalIDs }.Where(x => !string.IsNullOrEmpty(x))); + ExternalIDs = Utility.MergeLists(ExternalIDs, other.ExternalIDs, + (x, y) => x.Provider.Name == y.Provider.Name); return this; } } diff --git a/Kyoo.Common/Models/MetadataID.cs b/Kyoo.Common/Models/MetadataID.cs index 9f0b18ce..6095c640 100644 --- a/Kyoo.Common/Models/MetadataID.cs +++ b/Kyoo.Common/Models/MetadataID.cs @@ -3,11 +3,21 @@ namespace Kyoo.Models public class MetadataID { public long ID { get; set; } - public long ShowID { get; set; } - public virtual Show Show { get; set; } public long ProviderID { get; set; } public virtual ProviderID Provider {get; set; } + public long? ShowID { get; set; } + public virtual Show Show { get; set; } + + public long? EpisodeID { get; set; } + public virtual Episode Episode { get; set; } + + public long? SeasonID { get; set; } + public virtual Season Season { get; set; } + + public long? PeopleID { get; set; } + public virtual People People { get; set; } + public string DataID { get; set; } public string Link { get; set; } diff --git a/Kyoo.Common/Models/People.cs b/Kyoo.Common/Models/People.cs index 78b935fb..5e8235a9 100644 --- a/Kyoo.Common/Models/People.cs +++ b/Kyoo.Common/Models/People.cs @@ -6,16 +6,17 @@ namespace Kyoo.Models { public class People : IMergable { + public long ID { get; set; } public string Slug { get; set; } public string Name { get; set; } [JsonIgnore] public string ImgPrimary { get; set; } - public string ExternalIDs { get; set; } + public virtual IEnumerable ExternalIDs { get; set; } [JsonIgnore] public virtual IEnumerable Roles { get; set; } public People() {} - public People(string slug, string name, string imgPrimary, string externalIDs) + public People(string slug, string name, string imgPrimary, IEnumerable externalIDs) { Slug = slug; Name = name; @@ -30,7 +31,8 @@ namespace Kyoo.Models Slug ??= other.Slug; Name ??= other.Name; ImgPrimary ??= other.ImgPrimary; - ExternalIDs = string.Join('|', new [] { ExternalIDs, other.ExternalIDs }.Where(x => !string.IsNullOrEmpty(x))); + ExternalIDs = Utility.MergeLists(ExternalIDs, other.ExternalIDs, + (x, y) => x.Provider.Name == y.Provider.Name); return this; } } diff --git a/Kyoo.Common/Models/PeopleLink.cs b/Kyoo.Common/Models/PeopleLink.cs index 5878cfc0..e3aaf8a8 100644 --- a/Kyoo.Common/Models/PeopleLink.cs +++ b/Kyoo.Common/Models/PeopleLink.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using Newtonsoft.Json; namespace Kyoo.Models @@ -20,7 +21,7 @@ namespace Kyoo.Models set => People.Name = value; } - public string ExternalIDs + public IEnumerable ExternalIDs { get => People.ExternalIDs; set => People.ExternalIDs = value; @@ -41,7 +42,7 @@ namespace Kyoo.Models Type = type; } - public PeopleLink(string slug, string name, string role, string type, string imgPrimary, string externalIDs) + public PeopleLink(string slug, string name, string role, string type, string imgPrimary, IEnumerable externalIDs) { People = new People(slug, name, imgPrimary, externalIDs); Role = role; diff --git a/Kyoo.Common/Models/Season.cs b/Kyoo.Common/Models/Season.cs index 2a9a8212..11b72849 100644 --- a/Kyoo.Common/Models/Season.cs +++ b/Kyoo.Common/Models/Season.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Linq; using Newtonsoft.Json; namespace Kyoo.Models @@ -15,14 +14,20 @@ namespace Kyoo.Models public long? Year { get; set; } [JsonIgnore] public string ImgPrimary { get; set; } - public string ExternalIDs { get; set; } + public virtual IEnumerable ExternalIDs { get; set; } [JsonIgnore] public virtual Show Show { get; set; } [JsonIgnore] public virtual IEnumerable Episodes { get; set; } public Season() { } - public Season(long showID, long seasonNumber, string title, string overview, long? year, string imgPrimary, string externalIDs) + public Season(long showID, + long seasonNumber, + string title, + string overview, + long? year, + string imgPrimary, + IEnumerable externalIDs) { ShowID = showID; SeasonNumber = seasonNumber; @@ -45,7 +50,8 @@ namespace Kyoo.Models Overview ??= other.Overview; Year ??= other.Year; ImgPrimary ??= other.ImgPrimary; - ExternalIDs = string.Join('|', new [] { ExternalIDs, other.ExternalIDs }.Where(x => !string.IsNullOrEmpty(x))); + ExternalIDs = Utility.MergeLists(ExternalIDs, other.ExternalIDs, + (x, y) => x.Provider.Name == y.Provider.Name); return this; } } diff --git a/Kyoo.Common/Models/Show.cs b/Kyoo.Common/Models/Show.cs index 00cb0ce8..bd884119 100644 --- a/Kyoo.Common/Models/Show.cs +++ b/Kyoo.Common/Models/Show.cs @@ -114,7 +114,8 @@ namespace Kyoo.Models Slug ??= other.Slug; Title ??= other.Title; Aliases = Utility.MergeLists(Aliases, other.Aliases).ToArray(); - Genres = Utility.MergeLists(Genres, other.Genres, (x, y) => x.Slug == y.Slug); + Genres = Utility.MergeLists(Genres, other.Genres, + (x, y) => x.Slug == y.Slug); Path ??= other.Path; Overview ??= other.Overview; TrailerUrl ??= other.TrailerUrl; @@ -126,7 +127,8 @@ namespace Kyoo.Models ImgLogo ??= other.ImgLogo; ImgBackdrop ??= other.ImgBackdrop; Studio ??= other.Studio; - ExternalIDs = Utility.MergeLists(ExternalIDs, other.ExternalIDs, (x, y) => x.Provider != y.Provider); + ExternalIDs = Utility.MergeLists(ExternalIDs, other.ExternalIDs, + (x, y) => x.Provider.Name == y.Provider.Name); return this; } } diff --git a/Kyoo/Models/DatabaseContext.cs b/Kyoo/Models/DatabaseContext.cs index 391fba31..08aa48c6 100644 --- a/Kyoo/Models/DatabaseContext.cs +++ b/Kyoo/Models/DatabaseContext.cs @@ -111,9 +111,6 @@ namespace Kyoo modelBuilder.Entity() .Property(t => t.IsForced) .ValueGeneratedNever(); - - modelBuilder.Entity() - .HasKey(x => x.Slug); modelBuilder.Entity() .HasKey(x => new {x.ShowID, x.GenreID}); diff --git a/Kyoo/Models/DatabaseMigrations/Internal/20200423203356_Initial.Designer.cs b/Kyoo/Models/DatabaseMigrations/Internal/20200423211516_Initial.Designer.cs similarity index 93% rename from Kyoo/Models/DatabaseMigrations/Internal/20200423203356_Initial.Designer.cs rename to Kyoo/Models/DatabaseMigrations/Internal/20200423211516_Initial.Designer.cs index bdb1e824..95a37efd 100644 --- a/Kyoo/Models/DatabaseMigrations/Internal/20200423203356_Initial.Designer.cs +++ b/Kyoo/Models/DatabaseMigrations/Internal/20200423211516_Initial.Designer.cs @@ -9,7 +9,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace Kyoo.Models.DatabaseMigrations.Internal { [DbContext(typeof(DatabaseContext))] - [Migration("20200423203356_Initial")] + [Migration("20200423211516_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -80,9 +80,6 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.Property("EpisodeNumber") .HasColumnType("INTEGER"); - b.Property("ExternalIDs") - .HasColumnType("TEXT"); - b.Property("ImgPrimary") .HasColumnType("TEXT"); @@ -212,19 +209,34 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.Property("DataID") .HasColumnType("TEXT"); + b.Property("EpisodeID") + .HasColumnType("INTEGER"); + b.Property("Link") .HasColumnType("TEXT"); + b.Property("PeopleID") + .HasColumnType("INTEGER"); + b.Property("ProviderID") .HasColumnType("INTEGER"); - b.Property("ShowID") + b.Property("SeasonID") + .HasColumnType("INTEGER"); + + b.Property("ShowID") .HasColumnType("INTEGER"); b.HasKey("ID"); + b.HasIndex("EpisodeID"); + + b.HasIndex("PeopleID"); + b.HasIndex("ProviderID"); + b.HasIndex("SeasonID"); + b.HasIndex("ShowID"); b.ToTable("MetadataIds"); @@ -232,11 +244,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.People", b => { - b.Property("Slug") - .HasColumnType("TEXT"); - - b.Property("ExternalIDs") - .HasColumnType("TEXT"); + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); b.Property("ImgPrimary") .HasColumnType("TEXT"); @@ -244,7 +254,10 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.Property("Name") .HasColumnType("TEXT"); - b.HasKey("Slug"); + b.Property("Slug") + .HasColumnType("TEXT"); + + b.HasKey("ID"); b.HasIndex("Slug") .IsUnique(); @@ -261,6 +274,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.Property("PeopleID") .HasColumnType("TEXT"); + b.Property("PeopleID1") + .HasColumnType("INTEGER"); + b.Property("Role") .HasColumnType("TEXT"); @@ -272,7 +288,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.HasKey("ID"); - b.HasIndex("PeopleID"); + b.HasIndex("PeopleID1"); b.HasIndex("ShowID"); @@ -328,9 +344,6 @@ namespace Kyoo.Models.DatabaseMigrations.Internal .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); - b.Property("ExternalIDs") - .HasColumnType("TEXT"); - b.Property("ImgPrimary") .HasColumnType("TEXT"); @@ -537,24 +550,34 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.MetadataID", b => { + b.HasOne("Kyoo.Models.Episode", "Episode") + .WithMany("ExternalIDs") + .HasForeignKey("EpisodeID"); + + b.HasOne("Kyoo.Models.People", "People") + .WithMany("ExternalIDs") + .HasForeignKey("PeopleID"); + b.HasOne("Kyoo.Models.ProviderID", "Provider") .WithMany() .HasForeignKey("ProviderID") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + b.HasOne("Kyoo.Models.Season", "Season") + .WithMany("ExternalIDs") + .HasForeignKey("SeasonID"); + b.HasOne("Kyoo.Models.Show", "Show") .WithMany("ExternalIDs") - .HasForeignKey("ShowID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + .HasForeignKey("ShowID"); }); modelBuilder.Entity("Kyoo.Models.PeopleLink", b => { b.HasOne("Kyoo.Models.People", "People") .WithMany("Roles") - .HasForeignKey("PeopleID"); + .HasForeignKey("PeopleID1"); b.HasOne("Kyoo.Models.Show", "Show") .WithMany("People") diff --git a/Kyoo/Models/DatabaseMigrations/Internal/20200423203356_Initial.cs b/Kyoo/Models/DatabaseMigrations/Internal/20200423211516_Initial.cs similarity index 90% rename from Kyoo/Models/DatabaseMigrations/Internal/20200423203356_Initial.cs rename to Kyoo/Models/DatabaseMigrations/Internal/20200423211516_Initial.cs index 491bb24d..bfdc28e0 100644 --- a/Kyoo/Models/DatabaseMigrations/Internal/20200423203356_Initial.cs +++ b/Kyoo/Models/DatabaseMigrations/Internal/20200423211516_Initial.cs @@ -57,14 +57,15 @@ namespace Kyoo.Models.DatabaseMigrations.Internal name: "Peoples", columns: table => new { - Slug = table.Column(nullable: false), + ID = table.Column(nullable: false) + .Annotation("Sqlite:Autoincrement", true), + Slug = table.Column(nullable: true), Name = table.Column(nullable: true), - ImgPrimary = table.Column(nullable: true), - ExternalIDs = table.Column(nullable: true) + ImgPrimary = table.Column(nullable: true) }, constraints: table => { - table.PrimaryKey("PK_Peoples", x => x.Slug); + table.PrimaryKey("PK_Peoples", x => x.ID); }); migrationBuilder.CreateTable( @@ -211,34 +212,6 @@ namespace Kyoo.Models.DatabaseMigrations.Internal onDelete: ReferentialAction.Restrict); }); - migrationBuilder.CreateTable( - name: "MetadataIds", - columns: table => new - { - ID = table.Column(nullable: false) - .Annotation("Sqlite:Autoincrement", true), - ShowID = table.Column(nullable: false), - ProviderID = table.Column(nullable: false), - DataID = table.Column(nullable: true), - Link = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_MetadataIds", x => x.ID); - table.ForeignKey( - name: "FK_MetadataIds_ProviderIds_ProviderID", - column: x => x.ProviderID, - principalTable: "ProviderIds", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_MetadataIds_Shows_ShowID", - column: x => x.ShowID, - principalTable: "Shows", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - }); - migrationBuilder.CreateTable( name: "PeopleLinks", columns: table => new @@ -246,6 +219,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal ID = table.Column(nullable: false) .Annotation("Sqlite:Autoincrement", true), PeopleID = table.Column(nullable: true), + PeopleID1 = table.Column(nullable: true), ShowID = table.Column(nullable: false), Role = table.Column(nullable: true), Type = table.Column(nullable: true) @@ -254,10 +228,10 @@ namespace Kyoo.Models.DatabaseMigrations.Internal { table.PrimaryKey("PK_PeopleLinks", x => x.ID); table.ForeignKey( - name: "FK_PeopleLinks_Peoples_PeopleID", - column: x => x.PeopleID, + name: "FK_PeopleLinks_Peoples_PeopleID1", + column: x => x.PeopleID1, principalTable: "Peoples", - principalColumn: "Slug", + principalColumn: "ID", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_PeopleLinks_Shows_ShowID", @@ -311,8 +285,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal Title = table.Column(nullable: true), Overview = table.Column(nullable: true), Year = table.Column(nullable: true), - ImgPrimary = table.Column(nullable: true), - ExternalIDs = table.Column(nullable: true) + ImgPrimary = table.Column(nullable: true) }, constraints: table => { @@ -341,8 +314,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal Overview = table.Column(nullable: true), ReleaseDate = table.Column(nullable: true), Runtime = table.Column(nullable: false), - ImgPrimary = table.Column(nullable: true), - ExternalIDs = table.Column(nullable: true) + ImgPrimary = table.Column(nullable: true) }, constraints: table => { @@ -361,6 +333,55 @@ namespace Kyoo.Models.DatabaseMigrations.Internal onDelete: ReferentialAction.Cascade); }); + migrationBuilder.CreateTable( + name: "MetadataIds", + columns: table => new + { + ID = table.Column(nullable: false) + .Annotation("Sqlite:Autoincrement", true), + ProviderID = table.Column(nullable: false), + ShowID = table.Column(nullable: true), + EpisodeID = table.Column(nullable: true), + SeasonID = table.Column(nullable: true), + PeopleID = table.Column(nullable: true), + DataID = table.Column(nullable: true), + Link = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_MetadataIds", x => x.ID); + table.ForeignKey( + name: "FK_MetadataIds_Episodes_EpisodeID", + column: x => x.EpisodeID, + principalTable: "Episodes", + principalColumn: "ID", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_MetadataIds_Peoples_PeopleID", + column: x => x.PeopleID, + principalTable: "Peoples", + principalColumn: "ID", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_MetadataIds_ProviderIds_ProviderID", + column: x => x.ProviderID, + principalTable: "ProviderIds", + principalColumn: "ID", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_MetadataIds_Seasons_SeasonID", + column: x => x.SeasonID, + principalTable: "Seasons", + principalColumn: "ID", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_MetadataIds_Shows_ShowID", + column: x => x.ShowID, + principalTable: "Shows", + principalColumn: "ID", + onDelete: ReferentialAction.Restrict); + }); + migrationBuilder.CreateTable( name: "Tracks", columns: table => new @@ -446,20 +467,35 @@ namespace Kyoo.Models.DatabaseMigrations.Internal table: "LibraryLinks", column: "ShowID"); + migrationBuilder.CreateIndex( + name: "IX_MetadataIds_EpisodeID", + table: "MetadataIds", + column: "EpisodeID"); + + migrationBuilder.CreateIndex( + name: "IX_MetadataIds_PeopleID", + table: "MetadataIds", + column: "PeopleID"); + migrationBuilder.CreateIndex( name: "IX_MetadataIds_ProviderID", table: "MetadataIds", column: "ProviderID"); + migrationBuilder.CreateIndex( + name: "IX_MetadataIds_SeasonID", + table: "MetadataIds", + column: "SeasonID"); + migrationBuilder.CreateIndex( name: "IX_MetadataIds_ShowID", table: "MetadataIds", column: "ShowID"); migrationBuilder.CreateIndex( - name: "IX_PeopleLinks_PeopleID", + name: "IX_PeopleLinks_PeopleID1", table: "PeopleLinks", - column: "PeopleID"); + column: "PeopleID1"); migrationBuilder.CreateIndex( name: "IX_PeopleLinks_ShowID", diff --git a/Kyoo/Models/DatabaseMigrations/Internal/DatabaseContextModelSnapshot.cs b/Kyoo/Models/DatabaseMigrations/Internal/DatabaseContextModelSnapshot.cs index a40fda67..18da5846 100644 --- a/Kyoo/Models/DatabaseMigrations/Internal/DatabaseContextModelSnapshot.cs +++ b/Kyoo/Models/DatabaseMigrations/Internal/DatabaseContextModelSnapshot.cs @@ -78,9 +78,6 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.Property("EpisodeNumber") .HasColumnType("INTEGER"); - b.Property("ExternalIDs") - .HasColumnType("TEXT"); - b.Property("ImgPrimary") .HasColumnType("TEXT"); @@ -210,19 +207,34 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.Property("DataID") .HasColumnType("TEXT"); + b.Property("EpisodeID") + .HasColumnType("INTEGER"); + b.Property("Link") .HasColumnType("TEXT"); + b.Property("PeopleID") + .HasColumnType("INTEGER"); + b.Property("ProviderID") .HasColumnType("INTEGER"); - b.Property("ShowID") + b.Property("SeasonID") + .HasColumnType("INTEGER"); + + b.Property("ShowID") .HasColumnType("INTEGER"); b.HasKey("ID"); + b.HasIndex("EpisodeID"); + + b.HasIndex("PeopleID"); + b.HasIndex("ProviderID"); + b.HasIndex("SeasonID"); + b.HasIndex("ShowID"); b.ToTable("MetadataIds"); @@ -230,11 +242,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.People", b => { - b.Property("Slug") - .HasColumnType("TEXT"); - - b.Property("ExternalIDs") - .HasColumnType("TEXT"); + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); b.Property("ImgPrimary") .HasColumnType("TEXT"); @@ -242,7 +252,10 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.Property("Name") .HasColumnType("TEXT"); - b.HasKey("Slug"); + b.Property("Slug") + .HasColumnType("TEXT"); + + b.HasKey("ID"); b.HasIndex("Slug") .IsUnique(); @@ -259,6 +272,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.Property("PeopleID") .HasColumnType("TEXT"); + b.Property("PeopleID1") + .HasColumnType("INTEGER"); + b.Property("Role") .HasColumnType("TEXT"); @@ -270,7 +286,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.HasKey("ID"); - b.HasIndex("PeopleID"); + b.HasIndex("PeopleID1"); b.HasIndex("ShowID"); @@ -326,9 +342,6 @@ namespace Kyoo.Models.DatabaseMigrations.Internal .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); - b.Property("ExternalIDs") - .HasColumnType("TEXT"); - b.Property("ImgPrimary") .HasColumnType("TEXT"); @@ -535,24 +548,34 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.MetadataID", b => { + b.HasOne("Kyoo.Models.Episode", "Episode") + .WithMany("ExternalIDs") + .HasForeignKey("EpisodeID"); + + b.HasOne("Kyoo.Models.People", "People") + .WithMany("ExternalIDs") + .HasForeignKey("PeopleID"); + b.HasOne("Kyoo.Models.ProviderID", "Provider") .WithMany() .HasForeignKey("ProviderID") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + b.HasOne("Kyoo.Models.Season", "Season") + .WithMany("ExternalIDs") + .HasForeignKey("SeasonID"); + b.HasOne("Kyoo.Models.Show", "Show") .WithMany("ExternalIDs") - .HasForeignKey("ShowID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + .HasForeignKey("ShowID"); }); modelBuilder.Entity("Kyoo.Models.PeopleLink", b => { b.HasOne("Kyoo.Models.People", "People") .WithMany("Roles") - .HasForeignKey("PeopleID"); + .HasForeignKey("PeopleID1"); b.HasOne("Kyoo.Models.Show", "Show") .WithMany("People")