Remove database triggers

This commit is contained in:
Zoe Roux 2023-06-21 16:52:10 +09:00
parent 58b799edb4
commit db41c55230
6 changed files with 1403 additions and 63 deletions

View File

@ -0,0 +1,12 @@
{
"version": 1,
"isRoot": true,
"tools": {
"dotnet-ef": {
"version": "7.0.7",
"commands": [
"dotnet-ef"
]
}
}
}

View File

@ -61,9 +61,11 @@ namespace Kyoo.Core.Controllers
/// Create a new <see cref="EpisodeRepository"/>.
/// </summary>
/// <param name="database">The database handle to use.</param>
/// <param name="shows">A show repository</param>
/// <param name="providers">A provider repository</param>
/// <param name="tracks">A track repository</param>
public EpisodeRepository(DatabaseContext database,
IShowRepository shows,
IProviderRepository providers,
ITrackRepository tracks)
: base(database)
@ -71,6 +73,14 @@ namespace Kyoo.Core.Controllers
_database = database;
_providers = providers;
_tracks = tracks;
// Edit episode slugs when the show's slug changes.
shows.OnEdited += async (show) =>
{
foreach (Episode ep in _database.Episodes.Where(x => x.ShowID == show.ID))
ep.ShowSlug = show.Slug;
await _database.SaveChangesAsync();
};
}
/// <inheritdoc />

View File

@ -50,13 +50,23 @@ namespace Kyoo.Core.Controllers
/// Create a new <see cref="SeasonRepository"/>.
/// </summary>
/// <param name="database">The database handle that will be used</param>
/// <param name="shows">A shows repository</param>
/// <param name="providers">A provider repository</param>
public SeasonRepository(DatabaseContext database,
IShowRepository shows,
IProviderRepository providers)
: base(database)
{
_database = database;
_providers = providers;
// Edit seasons slugs when the show's slug changes.
shows.OnEdited += async (show) =>
{
foreach (Season season in _database.Seasons.Where(x => x.ShowID == show.ID))
season.ShowSlug = show.Slug;
await _database.SaveChangesAsync();
};
}
/// <inheritdoc/>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,50 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace Kyoo.Postgresql.Migrations
{
public partial class RemoveTrigers : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterDatabase()
.Annotation("Npgsql:Enum:item_type", "show,movie,collection")
.Annotation("Npgsql:Enum:status", "unknown,finished,airing,planned")
.Annotation("Npgsql:Enum:stream_type", "unknown,video,audio,subtitle")
.OldAnnotation("Npgsql:Enum:item_type", "show,movie,collection")
.OldAnnotation("Npgsql:Enum:status", "unknown,finished,airing,planned")
.OldAnnotation("Npgsql:Enum:stream_type", "unknown,video,audio,subtitle,attachment");
// language=PostgreSQL
migrationBuilder.Sql("DROP TRIGGER show_slug_trigger ON shows;");
// language=PostgreSQL
migrationBuilder.Sql(@"DROP FUNCTION show_slug_update;");
// language=PostgreSQL
migrationBuilder.Sql(@"DROP TRIGGER season_slug_trigger ON seasons;");
// language=PostgreSQL
migrationBuilder.Sql(@"DROP FUNCTION season_slug_update;");
// language=PostgreSQL
migrationBuilder.Sql("DROP TRIGGER episode_slug_trigger ON episodes;");
// language=PostgreSQL
migrationBuilder.Sql(@"DROP FUNCTION episode_slug_update;");
// language=PostgreSQL
migrationBuilder.Sql("DROP TRIGGER track_slug_trigger ON tracks;");
// language=PostgreSQL
migrationBuilder.Sql(@"DROP FUNCTION track_slug_update;");
// language=PostgreSQL
migrationBuilder.Sql("DROP TRIGGER episode_track_slug_trigger ON episodes;");
// language=PostgreSQL
migrationBuilder.Sql(@"DROP FUNCTION episode_update_tracks_slug;");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterDatabase()
.Annotation("Npgsql:Enum:item_type", "show,movie,collection")
.Annotation("Npgsql:Enum:status", "unknown,finished,airing,planned")
.Annotation("Npgsql:Enum:stream_type", "unknown,video,audio,subtitle,attachment")
.OldAnnotation("Npgsql:Enum:item_type", "show,movie,collection")
.OldAnnotation("Npgsql:Enum:status", "unknown,finished,airing,planned")
.OldAnnotation("Npgsql:Enum:stream_type", "unknown,video,audio,subtitle");
}
}
}

View File

@ -1,4 +1,4 @@
// <auto-generated />
// <auto-generated />
using System;
using System.Collections.Generic;
using Kyoo.Abstractions.Models;
@ -19,12 +19,12 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder
.HasPostgresEnum(null, "item_type", new[] { "show", "movie", "collection" })
.HasPostgresEnum(null, "status", new[] { "unknown", "finished", "airing", "planned" })
.HasPostgresEnum(null, "stream_type", new[] { "unknown", "video", "audio", "subtitle", "attachment" })
.HasPostgresEnum(null, "stream_type", new[] { "unknown", "video", "audio", "subtitle" })
.HasAnnotation("Relational:MaxIdentifierLength", 63)
.HasAnnotation("ProductVersion", "5.0.8")
.HasAnnotation("ProductVersion", "5.0.7")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
modelBuilder.Entity("Kyoo.Models.Collection", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.Collection", b =>
{
b.Property<int>("ID")
.ValueGeneratedOnAdd()
@ -59,7 +59,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("collections");
});
modelBuilder.Entity("Kyoo.Models.Episode", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.Episode", b =>
{
b.Property<int>("ID")
.ValueGeneratedOnAdd()
@ -129,7 +129,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("episodes");
});
modelBuilder.Entity("Kyoo.Models.Genre", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.Genre", b =>
{
b.Property<int>("ID")
.ValueGeneratedOnAdd()
@ -156,7 +156,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("genres");
});
modelBuilder.Entity("Kyoo.Models.Library", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.Library", b =>
{
b.Property<int>("ID")
.ValueGeneratedOnAdd()
@ -187,7 +187,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("libraries");
});
modelBuilder.Entity("Kyoo.Models.LibraryItem", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.LibraryItem", b =>
{
b.Property<int>("ID")
.HasColumnType("integer")
@ -232,7 +232,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToView("library_items");
});
modelBuilder.Entity("Kyoo.Models.People", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.People", b =>
{
b.Property<int>("ID")
.ValueGeneratedOnAdd()
@ -263,7 +263,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("people");
});
modelBuilder.Entity("Kyoo.Models.PeopleRole", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.PeopleRole", b =>
{
b.Property<int>("ID")
.ValueGeneratedOnAdd()
@ -299,7 +299,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("people_roles");
});
modelBuilder.Entity("Kyoo.Models.Provider", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.Provider", b =>
{
b.Property<int>("ID")
.ValueGeneratedOnAdd()
@ -330,7 +330,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("providers");
});
modelBuilder.Entity("Kyoo.Models.Season", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.Season", b =>
{
b.Property<int>("ID")
.ValueGeneratedOnAdd()
@ -385,7 +385,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("seasons");
});
modelBuilder.Entity("Kyoo.Models.Show", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.Show", b =>
{
b.Property<int>("ID")
.ValueGeneratedOnAdd()
@ -451,7 +451,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("shows");
});
modelBuilder.Entity("Kyoo.Models.Studio", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.Studio", b =>
{
b.Property<int>("ID")
.ValueGeneratedOnAdd()
@ -478,7 +478,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("studios");
});
modelBuilder.Entity("Kyoo.Models.Track", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.Track", b =>
{
b.Property<int>("ID")
.ValueGeneratedOnAdd()
@ -545,7 +545,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("tracks");
});
modelBuilder.Entity("Kyoo.Models.User", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.User", b =>
{
b.Property<int>("ID")
.ValueGeneratedOnAdd()
@ -592,7 +592,7 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("users");
});
modelBuilder.Entity("Kyoo.Models.WatchedEpisode", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.WatchedEpisode", b =>
{
b.Property<int>("UserID")
.HasColumnType("integer")
@ -891,15 +891,15 @@ namespace Kyoo.Postgresql.Migrations
b.ToTable("studio_metadata_id");
});
modelBuilder.Entity("Kyoo.Models.Episode", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.Episode", b =>
{
b.HasOne("Kyoo.Models.Season", "Season")
b.HasOne("Kyoo.Abstractions.Models.Season", "Season")
.WithMany("Episodes")
.HasForeignKey("SeasonID")
.HasConstraintName("fk_episodes_seasons_season_id")
.OnDelete(DeleteBehavior.Cascade);
b.HasOne("Kyoo.Models.Show", "Show")
b.HasOne("Kyoo.Abstractions.Models.Show", "Show")
.WithMany("Episodes")
.HasForeignKey("ShowID")
.HasConstraintName("fk_episodes_shows_show_id")
@ -911,16 +911,16 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Show");
});
modelBuilder.Entity("Kyoo.Models.PeopleRole", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.PeopleRole", b =>
{
b.HasOne("Kyoo.Models.People", "People")
b.HasOne("Kyoo.Abstractions.Models.People", "People")
.WithMany("Roles")
.HasForeignKey("PeopleID")
.HasConstraintName("fk_people_roles_people_people_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Show", "Show")
b.HasOne("Kyoo.Abstractions.Models.Show", "Show")
.WithMany("People")
.HasForeignKey("ShowID")
.HasConstraintName("fk_people_roles_shows_show_id")
@ -932,9 +932,9 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Show");
});
modelBuilder.Entity("Kyoo.Models.Season", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.Season", b =>
{
b.HasOne("Kyoo.Models.Show", "Show")
b.HasOne("Kyoo.Abstractions.Models.Show", "Show")
.WithMany("Seasons")
.HasForeignKey("ShowID")
.HasConstraintName("fk_seasons_shows_show_id")
@ -944,9 +944,9 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Show");
});
modelBuilder.Entity("Kyoo.Models.Show", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.Show", b =>
{
b.HasOne("Kyoo.Models.Studio", "Studio")
b.HasOne("Kyoo.Abstractions.Models.Studio", "Studio")
.WithMany("Shows")
.HasForeignKey("StudioID")
.HasConstraintName("fk_shows_studios_studio_id")
@ -955,9 +955,9 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Studio");
});
modelBuilder.Entity("Kyoo.Models.Track", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.Track", b =>
{
b.HasOne("Kyoo.Models.Episode", "Episode")
b.HasOne("Kyoo.Abstractions.Models.Episode", "Episode")
.WithMany("Tracks")
.HasForeignKey("EpisodeID")
.HasConstraintName("fk_tracks_episodes_episode_id")
@ -967,16 +967,16 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Episode");
});
modelBuilder.Entity("Kyoo.Models.WatchedEpisode", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.WatchedEpisode", b =>
{
b.HasOne("Kyoo.Models.Episode", "Episode")
b.HasOne("Kyoo.Abstractions.Models.Episode", "Episode")
.WithMany()
.HasForeignKey("EpisodeID")
.HasConstraintName("fk_watched_episodes_episodes_episode_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.User", null)
b.HasOne("Kyoo.Abstractions.Models.User", null)
.WithMany("CurrentlyWatching")
.HasForeignKey("UserID")
.HasConstraintName("fk_watched_episodes_users_user_id")
@ -988,14 +988,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("ShowUser", b =>
{
b.HasOne("Kyoo.Models.User", null)
b.HasOne("Kyoo.Abstractions.Models.User", null)
.WithMany()
.HasForeignKey("UsersID")
.HasConstraintName("fk_link_user_show_users_users_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Show", null)
b.HasOne("Kyoo.Abstractions.Models.Show", null)
.WithMany()
.HasForeignKey("WatchedID")
.HasConstraintName("fk_link_user_show_shows_watched_id")
@ -1005,14 +1005,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("collection_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_collection_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Collection", null)
b.HasOne("Kyoo.Abstractions.Models.Collection", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_collection_metadata_id_collections_collection_id")
@ -1024,14 +1024,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("episode_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_episode_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Episode", null)
b.HasOne("Kyoo.Abstractions.Models.Episode", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_episode_metadata_id_episodes_episode_id")
@ -1043,14 +1043,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("link_collection_show", b =>
{
b.HasOne("Kyoo.Models.Collection", null)
b.HasOne("Kyoo.Abstractions.Models.Collection", null)
.WithMany()
.HasForeignKey("collection_id")
.HasConstraintName("fk_link_collection_show_collections_collection_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Show", null)
b.HasOne("Kyoo.Abstractions.Models.Show", null)
.WithMany()
.HasForeignKey("show_id")
.HasConstraintName("fk_link_collection_show_shows_show_id")
@ -1060,14 +1060,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("link_library_collection", b =>
{
b.HasOne("Kyoo.Models.Collection", null)
b.HasOne("Kyoo.Abstractions.Models.Collection", null)
.WithMany()
.HasForeignKey("collection_id")
.HasConstraintName("fk_link_library_collection_collections_collection_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Library", null)
b.HasOne("Kyoo.Abstractions.Models.Library", null)
.WithMany()
.HasForeignKey("library_id")
.HasConstraintName("fk_link_library_collection_libraries_library_id")
@ -1077,14 +1077,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("link_library_provider", b =>
{
b.HasOne("Kyoo.Models.Library", null)
b.HasOne("Kyoo.Abstractions.Models.Library", null)
.WithMany()
.HasForeignKey("library_id")
.HasConstraintName("fk_link_library_provider_libraries_library_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Provider", null)
b.HasOne("Kyoo.Abstractions.Models.Provider", null)
.WithMany()
.HasForeignKey("provider_id")
.HasConstraintName("fk_link_library_provider_providers_provider_id")
@ -1094,14 +1094,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("link_library_show", b =>
{
b.HasOne("Kyoo.Models.Library", null)
b.HasOne("Kyoo.Abstractions.Models.Library", null)
.WithMany()
.HasForeignKey("library_id")
.HasConstraintName("fk_link_library_show_libraries_library_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Show", null)
b.HasOne("Kyoo.Abstractions.Models.Show", null)
.WithMany()
.HasForeignKey("show_id")
.HasConstraintName("fk_link_library_show_shows_show_id")
@ -1111,14 +1111,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("link_show_genre", b =>
{
b.HasOne("Kyoo.Models.Genre", null)
b.HasOne("Kyoo.Abstractions.Models.Genre", null)
.WithMany()
.HasForeignKey("genre_id")
.HasConstraintName("fk_link_show_genre_genres_genre_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Show", null)
b.HasOne("Kyoo.Abstractions.Models.Show", null)
.WithMany()
.HasForeignKey("show_id")
.HasConstraintName("fk_link_show_genre_shows_show_id")
@ -1128,14 +1128,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("people_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_people_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.People", null)
b.HasOne("Kyoo.Abstractions.Models.People", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_people_metadata_id_people_people_id")
@ -1147,14 +1147,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("season_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_season_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Season", null)
b.HasOne("Kyoo.Abstractions.Models.Season", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_season_metadata_id_seasons_season_id")
@ -1166,14 +1166,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("show_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_show_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Show", null)
b.HasOne("Kyoo.Abstractions.Models.Show", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_show_metadata_id_shows_show_id")
@ -1185,14 +1185,14 @@ namespace Kyoo.Postgresql.Migrations
modelBuilder.Entity("studio_metadata_id", b =>
{
b.HasOne("Kyoo.Models.Provider", "Provider")
b.HasOne("Kyoo.Abstractions.Models.Provider", "Provider")
.WithMany()
.HasForeignKey("ProviderID")
.HasConstraintName("fk_studio_metadata_id_providers_provider_id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Kyoo.Models.Studio", null)
b.HasOne("Kyoo.Abstractions.Models.Studio", null)
.WithMany("ExternalIDs")
.HasForeignKey("ResourceID")
.HasConstraintName("fk_studio_metadata_id_studios_studio_id")
@ -1202,33 +1202,33 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Provider");
});
modelBuilder.Entity("Kyoo.Models.Collection", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.Collection", b =>
{
b.Navigation("ExternalIDs");
});
modelBuilder.Entity("Kyoo.Models.Episode", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.Episode", b =>
{
b.Navigation("ExternalIDs");
b.Navigation("Tracks");
});
modelBuilder.Entity("Kyoo.Models.People", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.People", b =>
{
b.Navigation("ExternalIDs");
b.Navigation("Roles");
});
modelBuilder.Entity("Kyoo.Models.Season", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.Season", b =>
{
b.Navigation("Episodes");
b.Navigation("ExternalIDs");
});
modelBuilder.Entity("Kyoo.Models.Show", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.Show", b =>
{
b.Navigation("Episodes");
@ -1239,14 +1239,14 @@ namespace Kyoo.Postgresql.Migrations
b.Navigation("Seasons");
});
modelBuilder.Entity("Kyoo.Models.Studio", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.Studio", b =>
{
b.Navigation("ExternalIDs");
b.Navigation("Shows");
});
modelBuilder.Entity("Kyoo.Models.User", b =>
modelBuilder.Entity("Kyoo.Abstractions.Models.User", b =>
{
b.Navigation("CurrentlyWatching");
});