Browse Source

Apply review suggestions

Patrick Barron 5 years ago
parent
commit
55cfa96b9f
54 changed files with 189 additions and 1427 deletions
  1. 0 1140
      Jellyfin.Data/DbContexts/Jellyfin.cs
  2. 0 7
      Jellyfin.Data/Entities/Artwork.cs
  3. 1 7
      Jellyfin.Data/Entities/Book.cs
  4. 1 6
      Jellyfin.Data/Entities/BookMetadata.cs
  5. 0 6
      Jellyfin.Data/Entities/Chapter.cs
  6. 0 6
      Jellyfin.Data/Entities/Collection.cs
  7. 0 6
      Jellyfin.Data/Entities/CollectionItem.cs
  8. 0 5
      Jellyfin.Data/Entities/Company.cs
  9. 1 8
      Jellyfin.Data/Entities/CompanyMetadata.cs
  10. 1 6
      Jellyfin.Data/Entities/CustomItem.cs
  11. 1 9
      Jellyfin.Data/Entities/CustomItemMetadata.cs
  12. 1 7
      Jellyfin.Data/Entities/Episode.cs
  13. 1 8
      Jellyfin.Data/Entities/EpisodeMetadata.cs
  14. 0 6
      Jellyfin.Data/Entities/Genre.cs
  15. 0 5
      Jellyfin.Data/Entities/Group.cs
  16. 0 6
      Jellyfin.Data/Entities/Library.cs
  17. 0 6
      Jellyfin.Data/Entities/LibraryItem.cs
  18. 0 6
      Jellyfin.Data/Entities/LibraryRoot.cs
  19. 0 5
      Jellyfin.Data/Entities/MediaFile.cs
  20. 0 6
      Jellyfin.Data/Entities/MediaFileStream.cs
  21. 0 5
      Jellyfin.Data/Entities/Metadata.cs
  22. 0 6
      Jellyfin.Data/Entities/MetadataProvider.cs
  23. 0 6
      Jellyfin.Data/Entities/MetadataProviderId.cs
  24. 1 7
      Jellyfin.Data/Entities/Movie.cs
  25. 1 6
      Jellyfin.Data/Entities/MovieMetadata.cs
  26. 1 7
      Jellyfin.Data/Entities/MusicAlbum.cs
  27. 1 6
      Jellyfin.Data/Entities/MusicAlbumMetadata.cs
  28. 0 4
      Jellyfin.Data/Entities/Permission.cs
  29. 0 5
      Jellyfin.Data/Entities/Person.cs
  30. 0 5
      Jellyfin.Data/Entities/PersonRole.cs
  31. 1 7
      Jellyfin.Data/Entities/Photo.cs
  32. 1 8
      Jellyfin.Data/Entities/PhotoMetadata.cs
  33. 0 6
      Jellyfin.Data/Entities/Preference.cs
  34. 0 6
      Jellyfin.Data/Entities/ProviderMapping.cs
  35. 0 6
      Jellyfin.Data/Entities/Rating.cs
  36. 0 6
      Jellyfin.Data/Entities/RatingSource.cs
  37. 0 5
      Jellyfin.Data/Entities/Release.cs
  38. 1 7
      Jellyfin.Data/Entities/Season.cs
  39. 1 7
      Jellyfin.Data/Entities/SeasonMetadata.cs
  40. 1 7
      Jellyfin.Data/Entities/Series.cs
  41. 1 6
      Jellyfin.Data/Entities/SeriesMetadata.cs
  42. 1 7
      Jellyfin.Data/Entities/Track.cs
  43. 1 8
      Jellyfin.Data/Entities/TrackMetadata.cs
  44. 0 5
      Jellyfin.Data/Entities/User.cs
  45. 1 3
      Jellyfin.Data/Enums/ArtKind.cs
  46. 1 3
      Jellyfin.Data/Enums/MediaFileKind.cs
  47. 1 3
      Jellyfin.Data/Enums/PermissionKind.cs
  48. 1 3
      Jellyfin.Data/Enums/PersonRoleType.cs
  49. 1 3
      Jellyfin.Data/Enums/PreferenceKind.cs
  50. 1 3
      Jellyfin.Data/Enums/Weekday.cs
  51. 9 0
      Jellyfin.Data/ISavingChanges.cs
  52. 34 0
      Jellyfin.Server.Implementations/Jellyfin.Server.Implementations.csproj
  53. 115 0
      Jellyfin.Server.Implementations/JellyfinDb.cs
  54. 6 0
      MediaBrowser.sln

+ 0 - 1140
Jellyfin.Data/DbContexts/Jellyfin.cs

@@ -1,1140 +0,0 @@
-//------------------------------------------------------------------------------
-// <auto-generated>
-//     This code was generated from a template.
-//
-//     Manual changes to this file may cause unexpected behavior in your application.
-//     Manual changes to this file will be overwritten if the code is regenerated.
-//
-//     Produced by Entity Framework Visual Editor
-//     https://github.com/msawczyn/EFDesigner
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
-
-namespace Jellyfin.Data.DbContexts
-{
-   /// <inheritdoc/>
-   public partial class Jellyfin : DbContext
-   {
-      #region DbSets
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Artwork> Artwork { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Book> Books { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.BookMetadata> BookMetadata { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Chapter> Chapters { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Collection> Collections { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.CollectionItem> CollectionItems { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Company> Companies { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.CompanyMetadata> CompanyMetadata { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.CustomItem> CustomItems { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.CustomItemMetadata> CustomItemMetadata { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Episode> Episodes { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.EpisodeMetadata> EpisodeMetadata { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Genre> Genres { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Group> Groups { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Library> Libraries { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.LibraryItem> LibraryItems { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.LibraryRoot> LibraryRoot { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.MediaFile> MediaFiles { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.MediaFileStream> MediaFileStream { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Metadata> Metadata { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.MetadataProvider> MetadataProviders { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.MetadataProviderId> MetadataProviderIds { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Movie> Movies { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.MovieMetadata> MovieMetadata { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.MusicAlbum> MusicAlbums { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.MusicAlbumMetadata> MusicAlbumMetadata { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Permission> Permissions { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Person> People { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.PersonRole> PersonRoles { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Photo> Photo { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.PhotoMetadata> PhotoMetadata { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Preference> Preferences { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.ProviderMapping> ProviderMappings { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Rating> Ratings { get; set; }
-
-      /// <summary>
-      /// Repository for global::Jellyfin.Data.Entities.RatingSource - This is the entity to
-      /// store review ratings, not age ratings
-      /// </summary>
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.RatingSource> RatingSources { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Release> Releases { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Season> Seasons { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.SeasonMetadata> SeasonMetadata { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Series> Series { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.SeriesMetadata> SeriesMetadata { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.Track> Tracks { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.TrackMetadata> TrackMetadata { get; set; }
-      public virtual Microsoft.EntityFrameworkCore.DbSet<global::Jellyfin.Data.Entities.User> Users { get; set; }
-      #endregion DbSets
-
-      /// <summary>
-      /// Default connection string
-      /// </summary>
-      public static string ConnectionString { get; set; } = @"Data Source=jellyfin.db";
-
-      /// <inheritdoc />
-      public Jellyfin(DbContextOptions<Jellyfin> options) : base(options)
-      {
-      }
-
-      partial void CustomInit(DbContextOptionsBuilder optionsBuilder);
-
-      /// <inheritdoc />
-      protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
-      {
-         CustomInit(optionsBuilder);
-      }
-
-      partial void OnModelCreatingImpl(ModelBuilder modelBuilder);
-      partial void OnModelCreatedImpl(ModelBuilder modelBuilder);
-
-      /// <inheritdoc />
-      protected override void OnModelCreating(ModelBuilder modelBuilder)
-      {
-         base.OnModelCreating(modelBuilder);
-         OnModelCreatingImpl(modelBuilder);
-
-         modelBuilder.HasDefaultSchema("jellyfin");
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Artwork>()
-                     .ToTable("Artwork")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Artwork>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Artwork>()
-                     .Property(t => t.Path)
-                     .HasMaxLength(65535)
-                     .IsRequired()
-                     .HasField("_Path")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Artwork>()
-                     .Property(t => t.Kind)
-                     .IsRequired()
-                     .HasField("_Kind")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Artwork>().HasIndex(t => t.Kind);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Artwork>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Book>()
-                     .HasMany(x => x.BookMetadata)
-                     .WithOne()
-                     .HasForeignKey("BookMetadata_BookMetadata_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Book>()
-                     .HasMany(x => x.Releases)
-                     .WithOne()
-                     .HasForeignKey("Release_Releases_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.BookMetadata>()
-                     .Property(t => t.ISBN)
-                     .HasField("_ISBN")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.BookMetadata>()
-                     .HasMany(x => x.Publishers)
-                     .WithOne()
-                     .HasForeignKey("Company_Publishers_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Chapter>()
-                     .ToTable("Chapter")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Chapter>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Chapter>()
-                     .Property(t => t.Name)
-                     .HasMaxLength(1024)
-                     .HasField("_Name")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Chapter>()
-                     .Property(t => t.Language)
-                     .HasMaxLength(3)
-                     .IsRequired()
-                     .HasField("_Language")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Chapter>()
-                     .Property(t => t.TimeStart)
-                     .IsRequired()
-                     .HasField("_TimeStart")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Chapter>()
-                     .Property(t => t.TimeEnd)
-                     .HasField("_TimeEnd")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Chapter>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Collection>()
-                     .ToTable("Collection")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Collection>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Collection>()
-                     .Property(t => t.Name)
-                     .HasMaxLength(1024)
-                     .HasField("_Name")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Collection>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Collection>()
-                     .HasMany(x => x.CollectionItem)
-                     .WithOne()
-                     .HasForeignKey("CollectionItem_CollectionItem_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.CollectionItem>()
-                     .ToTable("CollectionItem")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.CollectionItem>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.CollectionItem>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.CollectionItem>()
-                     .HasOne(x => x.LibraryItem)
-                     .WithOne()
-                     .HasForeignKey<global::Jellyfin.Data.Entities.CollectionItem>("LibraryItem_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.CollectionItem>()
-                     .HasOne(x => x.Next)
-                     .WithOne()
-                     .HasForeignKey<global::Jellyfin.Data.Entities.CollectionItem>("CollectionItem_Next_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.CollectionItem>()
-                     .HasOne(x => x.Previous)
-                     .WithOne()
-                     .HasForeignKey<global::Jellyfin.Data.Entities.CollectionItem>("CollectionItem_Previous_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Company>()
-                     .ToTable("Company")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Company>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Company>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Company>()
-                     .HasMany(x => x.CompanyMetadata)
-                     .WithOne()
-                     .HasForeignKey("CompanyMetadata_CompanyMetadata_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Company>()
-                     .HasOne(x => x.Parent)
-                     .WithOne()
-                     .HasForeignKey<global::Jellyfin.Data.Entities.Company>("Company_Parent_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.CompanyMetadata>()
-                     .Property(t => t.Description)
-                     .HasMaxLength(65535)
-                     .HasField("_Description")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.CompanyMetadata>()
-                     .Property(t => t.Headquarters)
-                     .HasMaxLength(255)
-                     .HasField("_Headquarters")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.CompanyMetadata>()
-                     .Property(t => t.Country)
-                     .HasMaxLength(2)
-                     .HasField("_Country")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.CompanyMetadata>()
-                     .Property(t => t.Homepage)
-                     .HasMaxLength(1024)
-                     .HasField("_Homepage")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.CustomItem>()
-                     .HasMany(x => x.CustomItemMetadata)
-                     .WithOne()
-                     .HasForeignKey("CustomItemMetadata_CustomItemMetadata_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.CustomItem>()
-                     .HasMany(x => x.Releases)
-                     .WithOne()
-                     .HasForeignKey("Release_Releases_Id")
-                     .IsRequired();
-
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Episode>()
-                     .Property(t => t.EpisodeNumber)
-                     .HasField("_EpisodeNumber")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Episode>()
-                     .HasMany(x => x.Releases)
-                     .WithOne()
-                     .HasForeignKey("Release_Releases_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Episode>()
-                     .HasMany(x => x.EpisodeMetadata)
-                     .WithOne()
-                     .HasForeignKey("EpisodeMetadata_EpisodeMetadata_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.EpisodeMetadata>()
-                     .Property(t => t.Outline)
-                     .HasMaxLength(1024)
-                     .HasField("_Outline")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.EpisodeMetadata>()
-                     .Property(t => t.Plot)
-                     .HasMaxLength(65535)
-                     .HasField("_Plot")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.EpisodeMetadata>()
-                     .Property(t => t.Tagline)
-                     .HasMaxLength(1024)
-                     .HasField("_Tagline")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Genre>()
-                     .ToTable("Genre")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Genre>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Genre>()
-                     .Property(t => t.Name)
-                     .HasMaxLength(255)
-                     .IsRequired()
-                     .HasField("_Name")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Genre>().HasIndex(t => t.Name)
-                     .IsUnique();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Genre>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Group>()
-                     .ToTable("Groups")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Group>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Group>()
-                     .Property(t => t.Name)
-                     .HasMaxLength(255)
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Group>().Property<byte[]>("Timestamp").IsConcurrencyToken();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Group>()
-                     .HasMany(x => x.GroupPermissions)
-                     .WithOne()
-                     .HasForeignKey("Permission_GroupPermissions_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Group>()
-                     .HasMany(x => x.ProviderMappings)
-                     .WithOne()
-                     .HasForeignKey("ProviderMapping_ProviderMappings_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Group>()
-                     .HasMany(x => x.Preferences)
-                     .WithOne()
-                     .HasForeignKey("Preference_Preferences_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Library>()
-                     .ToTable("Library")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Library>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Library>()
-                     .Property(t => t.Name)
-                     .HasMaxLength(1024)
-                     .IsRequired()
-                     .HasField("_Name")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Library>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.LibraryItem>()
-                     .ToTable("LibraryItem")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.LibraryItem>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.LibraryItem>()
-                     .Property(t => t.UrlId)
-                     .IsRequired()
-                     .HasField("_UrlId")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.LibraryItem>().HasIndex(t => t.UrlId)
-                     .IsUnique();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.LibraryItem>()
-                     .Property(t => t.DateAdded)
-                     .IsRequired()
-                     .HasField("_DateAdded")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.LibraryItem>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.LibraryItem>()
-                     .HasOne(x => x.LibraryRoot)
-                     .WithOne()
-                     .HasForeignKey<global::Jellyfin.Data.Entities.LibraryItem>("LibraryRoot_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.LibraryRoot>()
-                     .ToTable("LibraryRoot")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.LibraryRoot>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.LibraryRoot>()
-                     .Property(t => t.Path)
-                     .HasMaxLength(65535)
-                     .IsRequired()
-                     .HasField("_Path")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.LibraryRoot>()
-                     .Property(t => t.NetworkPath)
-                     .HasMaxLength(65535)
-                     .HasField("_NetworkPath")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.LibraryRoot>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.LibraryRoot>()
-                     .HasOne(x => x.Library)
-                     .WithOne()
-                     .HasForeignKey<global::Jellyfin.Data.Entities.LibraryRoot>("Library_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MediaFile>()
-                     .ToTable("MediaFile")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MediaFile>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MediaFile>()
-                     .Property(t => t.Path)
-                     .HasMaxLength(65535)
-                     .IsRequired()
-                     .HasField("_Path")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MediaFile>()
-                     .Property(t => t.Kind)
-                     .IsRequired()
-                     .HasField("_Kind")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MediaFile>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MediaFile>()
-                     .HasMany(x => x.MediaFileStreams)
-                     .WithOne()
-                     .HasForeignKey("MediaFileStream_MediaFileStreams_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MediaFileStream>()
-                     .ToTable("MediaFileStream")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MediaFileStream>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MediaFileStream>()
-                     .Property(t => t.StreamNumber)
-                     .IsRequired()
-                     .HasField("_StreamNumber")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MediaFileStream>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Metadata>()
-                     .ToTable("Metadata")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Metadata>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Metadata>()
-                     .Property(t => t.Title)
-                     .HasMaxLength(1024)
-                     .IsRequired()
-                     .HasField("_Title")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Metadata>()
-                     .Property(t => t.OriginalTitle)
-                     .HasMaxLength(1024)
-                     .HasField("_OriginalTitle")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Metadata>()
-                     .Property(t => t.SortTitle)
-                     .HasMaxLength(1024)
-                     .HasField("_SortTitle")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Metadata>()
-                     .Property(t => t.Language)
-                     .HasMaxLength(3)
-                     .IsRequired()
-                     .HasField("_Language")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Metadata>()
-                     .Property(t => t.ReleaseDate)
-                     .HasField("_ReleaseDate")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Metadata>()
-                     .Property(t => t.DateAdded)
-                     .IsRequired()
-                     .HasField("_DateAdded")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Metadata>()
-                     .Property(t => t.DateModified)
-                     .IsRequired()
-                     .HasField("_DateModified")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Metadata>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Metadata>()
-                     .HasMany(x => x.PersonRoles)
-                     .WithOne()
-                     .HasForeignKey("PersonRole_PersonRoles_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Metadata>()
-                     .HasMany(x => x.Genres)
-                     .WithOne()
-                     .HasForeignKey("Genre_Genres_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Metadata>()
-                     .HasMany(x => x.Artwork)
-                     .WithOne()
-                     .HasForeignKey("Artwork_Artwork_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Metadata>()
-                     .HasMany(x => x.Ratings)
-                     .WithOne()
-                     .HasForeignKey("Rating_Ratings_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Metadata>()
-                     .HasMany(x => x.Sources)
-                     .WithOne()
-                     .HasForeignKey("MetadataProviderId_Sources_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MetadataProvider>()
-                     .ToTable("MetadataProvider")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MetadataProvider>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MetadataProvider>()
-                     .Property(t => t.Name)
-                     .HasMaxLength(1024)
-                     .IsRequired()
-                     .HasField("_Name")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MetadataProvider>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MetadataProviderId>()
-                     .ToTable("MetadataProviderId")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MetadataProviderId>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MetadataProviderId>()
-                     .Property(t => t.ProviderId)
-                     .HasMaxLength(255)
-                     .IsRequired()
-                     .HasField("_ProviderId")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MetadataProviderId>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MetadataProviderId>()
-                     .HasOne(x => x.MetadataProvider)
-                     .WithOne()
-                     .HasForeignKey<global::Jellyfin.Data.Entities.MetadataProviderId>("MetadataProvider_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Movie>()
-                     .HasMany(x => x.Releases)
-                     .WithOne()
-                     .HasForeignKey("Release_Releases_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Movie>()
-                     .HasMany(x => x.MovieMetadata)
-                     .WithOne()
-                     .HasForeignKey("MovieMetadata_MovieMetadata_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MovieMetadata>()
-                     .Property(t => t.Outline)
-                     .HasMaxLength(1024)
-                     .HasField("_Outline")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MovieMetadata>()
-                     .Property(t => t.Plot)
-                     .HasMaxLength(65535)
-                     .HasField("_Plot")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MovieMetadata>()
-                     .Property(t => t.Tagline)
-                     .HasMaxLength(1024)
-                     .HasField("_Tagline")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MovieMetadata>()
-                     .Property(t => t.Country)
-                     .HasMaxLength(2)
-                     .HasField("_Country")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MovieMetadata>()
-                     .HasMany(x => x.Studios)
-                     .WithOne()
-                     .HasForeignKey("Company_Studios_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MusicAlbum>()
-                     .HasMany(x => x.MusicAlbumMetadata)
-                     .WithOne()
-                     .HasForeignKey("MusicAlbumMetadata_MusicAlbumMetadata_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MusicAlbum>()
-                     .HasMany(x => x.Tracks)
-                     .WithOne()
-                     .HasForeignKey("Track_Tracks_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MusicAlbumMetadata>()
-                     .Property(t => t.Barcode)
-                     .HasMaxLength(255)
-                     .HasField("_Barcode")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MusicAlbumMetadata>()
-                     .Property(t => t.LabelNumber)
-                     .HasMaxLength(255)
-                     .HasField("_LabelNumber")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MusicAlbumMetadata>()
-                     .Property(t => t.Country)
-                     .HasMaxLength(2)
-                     .HasField("_Country")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.MusicAlbumMetadata>()
-                     .HasMany(x => x.Labels)
-                     .WithOne()
-                     .HasForeignKey("Company_Labels_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Permission>()
-                     .ToTable("Permissions")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Permission>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Permission>()
-                     .Property(t => t.Kind)
-                     .IsRequired()
-                     .HasField("_Kind")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Permission>()
-                     .Property(t => t.Value)
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Permission>().Property<byte[]>("Timestamp").IsConcurrencyToken();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Person>()
-                     .ToTable("Person")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Person>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Person>()
-                     .Property(t => t.UrlId)
-                     .IsRequired()
-                     .HasField("_UrlId")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Person>()
-                     .Property(t => t.Name)
-                     .HasMaxLength(1024)
-                     .IsRequired()
-                     .HasField("_Name")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Person>()
-                     .Property(t => t.SourceId)
-                     .HasMaxLength(255)
-                     .HasField("_SourceId")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Person>()
-                     .Property(t => t.DateAdded)
-                     .IsRequired()
-                     .HasField("_DateAdded")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Person>()
-                     .Property(t => t.DateModified)
-                     .IsRequired()
-                     .HasField("_DateModified")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Person>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Person>()
-                     .HasMany(x => x.Sources)
-                     .WithOne()
-                     .HasForeignKey("MetadataProviderId_Sources_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.PersonRole>()
-                     .ToTable("PersonRole")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.PersonRole>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.PersonRole>()
-                     .Property(t => t.Role)
-                     .HasMaxLength(1024)
-                     .HasField("_Role")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.PersonRole>()
-                     .Property(t => t.Type)
-                     .IsRequired()
-                     .HasField("_Type")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.PersonRole>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.PersonRole>()
-                     .HasOne(x => x.Person)
-                     .WithOne()
-                     .HasForeignKey<global::Jellyfin.Data.Entities.PersonRole>("Person_Id")
-                     .IsRequired()
-                     .OnDelete(DeleteBehavior.Cascade);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.PersonRole>()
-                     .HasOne(x => x.Artwork)
-                     .WithOne()
-                     .HasForeignKey<global::Jellyfin.Data.Entities.PersonRole>("Artwork_Artwork_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.PersonRole>()
-                     .HasMany(x => x.Sources)
-                     .WithOne()
-                     .HasForeignKey("MetadataProviderId_Sources_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Photo>()
-                     .HasMany(x => x.PhotoMetadata)
-                     .WithOne()
-                     .HasForeignKey("PhotoMetadata_PhotoMetadata_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Photo>()
-                     .HasMany(x => x.Releases)
-                     .WithOne()
-                     .HasForeignKey("Release_Releases_Id")
-                     .IsRequired();
-
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Preference>()
-                     .ToTable("Preferences")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Preference>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Preference>()
-                     .Property(t => t.Kind)
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Preference>()
-                     .Property(t => t.Value)
-                     .HasMaxLength(65535)
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Preference>().Property<byte[]>("Timestamp").IsConcurrencyToken();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.ProviderMapping>()
-                     .ToTable("ProviderMappings")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.ProviderMapping>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.ProviderMapping>()
-                     .Property(t => t.ProviderName)
-                     .HasMaxLength(255)
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.ProviderMapping>()
-                     .Property(t => t.ProviderSecrets)
-                     .HasMaxLength(65535)
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.ProviderMapping>()
-                     .Property(t => t.ProviderData)
-                     .HasMaxLength(65535)
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.ProviderMapping>().Property<byte[]>("Timestamp").IsConcurrencyToken();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Rating>()
-                     .ToTable("Rating")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Rating>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Rating>()
-                     .Property(t => t.Value)
-                     .IsRequired()
-                     .HasField("_Value")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Rating>()
-                     .Property(t => t.Votes)
-                     .HasField("_Votes")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Rating>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Rating>()
-                     .HasOne(x => x.RatingType)
-                     .WithOne()
-                     .HasForeignKey<global::Jellyfin.Data.Entities.Rating>("RatingSource_RatingType_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.RatingSource>()
-                     .ToTable("RatingType")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.RatingSource>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.RatingSource>()
-                     .Property(t => t.Name)
-                     .HasMaxLength(1024)
-                     .HasField("_Name")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.RatingSource>()
-                     .Property(t => t.MaximumValue)
-                     .IsRequired()
-                     .HasField("_MaximumValue")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.RatingSource>()
-                     .Property(t => t.MinimumValue)
-                     .IsRequired()
-                     .HasField("_MinimumValue")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.RatingSource>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.RatingSource>()
-                     .HasOne(x => x.Source)
-                     .WithOne()
-                     .HasForeignKey<global::Jellyfin.Data.Entities.RatingSource>("MetadataProviderId_Source_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Release>()
-                     .ToTable("Release")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Release>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .HasField("_Id")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Release>()
-                     .Property(t => t.Name)
-                     .HasMaxLength(1024)
-                     .IsRequired()
-                     .HasField("_Name")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Release>()
-                     .Property(t => t.Timestamp)
-                     .IsRequired()
-                     .HasField("_Timestamp")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property)
-                     .IsRowVersion();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Release>()
-                     .HasMany(x => x.MediaFiles)
-                     .WithOne()
-                     .HasForeignKey("MediaFile_MediaFiles_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Release>()
-                     .HasMany(x => x.Chapters)
-                     .WithOne()
-                     .HasForeignKey("Chapter_Chapters_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Season>()
-                     .Property(t => t.SeasonNumber)
-                     .HasField("_SeasonNumber")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Season>()
-                     .HasMany(x => x.SeasonMetadata)
-                     .WithOne()
-                     .HasForeignKey("SeasonMetadata_SeasonMetadata_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Season>()
-                     .HasMany(x => x.Episodes)
-                     .WithOne()
-                     .HasForeignKey("Episode_Episodes_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.SeasonMetadata>()
-                     .Property(t => t.Outline)
-                     .HasMaxLength(1024)
-                     .HasField("_Outline")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Series>()
-                     .Property(t => t.AirsDayOfWeek)
-                     .HasField("_AirsDayOfWeek")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Series>()
-                     .Property(t => t.AirsTime)
-                     .HasField("_AirsTime")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Series>()
-                     .Property(t => t.FirstAired)
-                     .HasField("_FirstAired")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Series>()
-                     .HasMany(x => x.SeriesMetadata)
-                     .WithOne()
-                     .HasForeignKey("SeriesMetadata_SeriesMetadata_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Series>()
-                     .HasMany(x => x.Seasons)
-                     .WithOne()
-                     .HasForeignKey("Season_Seasons_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.SeriesMetadata>()
-                     .Property(t => t.Outline)
-                     .HasMaxLength(1024)
-                     .HasField("_Outline")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.SeriesMetadata>()
-                     .Property(t => t.Plot)
-                     .HasMaxLength(65535)
-                     .HasField("_Plot")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.SeriesMetadata>()
-                     .Property(t => t.Tagline)
-                     .HasMaxLength(1024)
-                     .HasField("_Tagline")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.SeriesMetadata>()
-                     .Property(t => t.Country)
-                     .HasMaxLength(2)
-                     .HasField("_Country")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.SeriesMetadata>()
-                     .HasMany(x => x.Networks)
-                     .WithOne()
-                     .HasForeignKey("Company_Networks_Id")
-                     .IsRequired();
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Track>()
-                     .Property(t => t.TrackNumber)
-                     .HasField("_TrackNumber")
-                     .UsePropertyAccessMode(PropertyAccessMode.Property);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Track>()
-                     .HasMany(x => x.Releases)
-                     .WithOne()
-                     .HasForeignKey("Release_Releases_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.Track>()
-                     .HasMany(x => x.TrackMetadata)
-                     .WithOne()
-                     .HasForeignKey("TrackMetadata_TrackMetadata_Id")
-                     .IsRequired();
-
-
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .ToTable("Users")
-                     .HasKey(t => t.Id);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .Property(t => t.Id)
-                     .IsRequired()
-                     .ValueGeneratedOnAdd();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .Property(t => t.LastLoginTimestamp)
-                     .IsRequired()
-                     .IsRowVersion();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .Property(t => t.Username)
-                     .HasMaxLength(255)
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .Property(t => t.Password)
-                     .HasMaxLength(65535);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .Property(t => t.MustUpdatePassword)
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .Property(t => t.AudioLanguagePreference)
-                     .HasMaxLength(255)
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .Property(t => t.AuthenticationProviderId)
-                     .HasMaxLength(255)
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .Property(t => t.GroupedFolders)
-                     .HasMaxLength(65535);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .Property(t => t.InvalidLoginAttemptCount)
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .Property(t => t.LatestItemExcludes)
-                     .HasMaxLength(65535);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .Property(t => t.MyMediaExcludes)
-                     .HasMaxLength(65535);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .Property(t => t.OrderedViews)
-                     .HasMaxLength(65535);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .Property(t => t.SubtitleMode)
-                     .HasMaxLength(255)
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .Property(t => t.PlayDefaultAudioTrack)
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .Property(t => t.SubtitleLanguagePrefernce)
-                     .HasMaxLength(255);
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .HasMany(x => x.Groups)
-                     .WithOne()
-                     .HasForeignKey("Group_Groups_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .HasMany(x => x.Permissions)
-                     .WithOne()
-                     .HasForeignKey("Permission_Permissions_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .HasMany(x => x.ProviderMappings)
-                     .WithOne()
-                     .HasForeignKey("ProviderMapping_ProviderMappings_Id")
-                     .IsRequired();
-         modelBuilder.Entity<global::Jellyfin.Data.Entities.User>()
-                     .HasMany(x => x.Preferences)
-                     .WithOne()
-                     .HasForeignKey("Preference_Preferences_Id")
-                     .IsRequired();
-
-         OnModelCreatedImpl(modelBuilder);
-      }
-   }
-}

+ 0 - 7
Jellyfin.Data/Entities/Artwork.cs

@@ -1,15 +1,8 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Artwork")]
     public partial class Artwork
     {
         partial void Init();

+ 1 - 7
Jellyfin.Data/Entities/Book.cs

@@ -1,15 +1,9 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Book")]
     public partial class Book : LibraryItem
     {
         partial void Init();
@@ -17,7 +11,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected Book() : base()
+        protected Book()
         {
             BookMetadata = new HashSet<BookMetadata>();
             Releases = new HashSet<Release>();

+ 1 - 6
Jellyfin.Data/Entities/BookMetadata.cs

@@ -1,11 +1,6 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
@@ -16,7 +11,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected BookMetadata() : base()
+        protected BookMetadata()
         {
             Publishers = new HashSet<Company>();
 

+ 0 - 6
Jellyfin.Data/Entities/Chapter.cs

@@ -1,15 +1,9 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Chapter")]
     public partial class Chapter
     {
         partial void Init();

+ 0 - 6
Jellyfin.Data/Entities/Collection.cs

@@ -1,15 +1,9 @@
-using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Collection")]
     public partial class Collection
     {
         partial void Init();

+ 0 - 6
Jellyfin.Data/Entities/CollectionItem.cs

@@ -1,15 +1,9 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("CollectionItem")]
     public partial class CollectionItem
     {
         partial void Init();

+ 0 - 5
Jellyfin.Data/Entities/Company.cs

@@ -1,15 +1,10 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Company")]
     public partial class Company
     {
         partial void Init();

+ 1 - 8
Jellyfin.Data/Entities/CompanyMetadata.cs

@@ -1,15 +1,8 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("CompanyMetadata")]
     public partial class CompanyMetadata : Metadata
     {
         partial void Init();
@@ -17,7 +10,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected CompanyMetadata() : base()
+        protected CompanyMetadata()
         {
             Init();
         }

+ 1 - 6
Jellyfin.Data/Entities/CustomItem.cs

@@ -1,11 +1,6 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
@@ -16,7 +11,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected CustomItem() : base()
+        protected CustomItem()
         {
             CustomItemMetadata = new HashSet<CustomItemMetadata>();
             Releases = new HashSet<Release>();

+ 1 - 9
Jellyfin.Data/Entities/CustomItemMetadata.cs

@@ -1,15 +1,7 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("CustomItemMetadata")]
     public partial class CustomItemMetadata : Metadata
     {
         partial void Init();
@@ -17,7 +9,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected CustomItemMetadata() : base()
+        protected CustomItemMetadata()
         {
             Init();
         }

+ 1 - 7
Jellyfin.Data/Entities/Episode.cs

@@ -1,15 +1,9 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Episode")]
     public partial class Episode : LibraryItem
     {
         partial void Init();
@@ -17,7 +11,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected Episode() : base()
+        protected Episode()
         {
             // NOTE: This class has one-to-one associations with LibraryRoot, LibraryItem and CollectionItem.
             // One-to-one associations are not validated in constructors since this causes a scenario where each one must be constructed before the other.

+ 1 - 8
Jellyfin.Data/Entities/EpisodeMetadata.cs

@@ -1,15 +1,8 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("EpisodeMetadata")]
     public partial class EpisodeMetadata : Metadata
     {
         partial void Init();
@@ -17,7 +10,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected EpisodeMetadata() : base()
+        protected EpisodeMetadata()
         {
             Init();
         }

+ 0 - 6
Jellyfin.Data/Entities/Genre.cs

@@ -1,15 +1,9 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Genre")]
     public partial class Genre
     {
         partial void Init();

+ 0 - 5
Jellyfin.Data/Entities/Group.cs

@@ -1,15 +1,10 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Group")]
     public partial class Group
     {
         partial void Init();

+ 0 - 6
Jellyfin.Data/Entities/Library.cs

@@ -1,15 +1,9 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Library")]
     public partial class Library
     {
         partial void Init();

+ 0 - 6
Jellyfin.Data/Entities/LibraryItem.cs

@@ -1,15 +1,9 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("LibraryItem")]
     public abstract partial class LibraryItem
     {
         partial void Init();

+ 0 - 6
Jellyfin.Data/Entities/LibraryRoot.cs

@@ -1,15 +1,9 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("LibraryRoot")]
     public partial class LibraryRoot
     {
         partial void Init();

+ 0 - 5
Jellyfin.Data/Entities/MediaFile.cs

@@ -1,15 +1,10 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("MediaFile")]
     public partial class MediaFile
     {
         partial void Init();

+ 0 - 6
Jellyfin.Data/Entities/MediaFileStream.cs

@@ -1,15 +1,9 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("MediaFileStream")]
     public partial class MediaFileStream
     {
         partial void Init();

+ 0 - 5
Jellyfin.Data/Entities/Metadata.cs

@@ -1,15 +1,10 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Metadata")]
     public abstract partial class Metadata
     {
         partial void Init();

+ 0 - 6
Jellyfin.Data/Entities/MetadataProvider.cs

@@ -1,15 +1,9 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("MetadataProvider")]
     public partial class MetadataProvider
     {
         partial void Init();

+ 0 - 6
Jellyfin.Data/Entities/MetadataProviderId.cs

@@ -1,15 +1,9 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("MetadataProviderId")]
     public partial class MetadataProviderId
     {
         partial void Init();

+ 1 - 7
Jellyfin.Data/Entities/Movie.cs

@@ -1,15 +1,9 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Movie")]
     public partial class Movie : LibraryItem
     {
         partial void Init();
@@ -17,7 +11,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected Movie() : base()
+        protected Movie()
         {
             Releases = new HashSet<Release>();
             MovieMetadata = new HashSet<MovieMetadata>();

+ 1 - 6
Jellyfin.Data/Entities/MovieMetadata.cs

@@ -1,15 +1,10 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("MovieMetadata")]
     public partial class MovieMetadata : Metadata
     {
         partial void Init();
@@ -17,7 +12,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected MovieMetadata() : base()
+        protected MovieMetadata()
         {
             Studios = new HashSet<Company>();
 

+ 1 - 7
Jellyfin.Data/Entities/MusicAlbum.cs

@@ -1,15 +1,9 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("MusicAlbum")]
     public partial class MusicAlbum : LibraryItem
     {
         partial void Init();
@@ -17,7 +11,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected MusicAlbum() : base()
+        protected MusicAlbum()
         {
             MusicAlbumMetadata = new HashSet<MusicAlbumMetadata>();
             Tracks = new HashSet<Track>();

+ 1 - 6
Jellyfin.Data/Entities/MusicAlbumMetadata.cs

@@ -1,15 +1,10 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("MusicAlbumMetadata")]
     public partial class MusicAlbumMetadata : Metadata
     {
         partial void Init();
@@ -17,7 +12,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected MusicAlbumMetadata() : base()
+        protected MusicAlbumMetadata()
         {
             Labels = new HashSet<Company>();
 

+ 0 - 4
Jellyfin.Data/Entities/Permission.cs

@@ -1,15 +1,11 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
 using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
 using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Permission")]
     public partial class Permission
     {
         partial void Init();

+ 0 - 5
Jellyfin.Data/Entities/Person.cs

@@ -1,15 +1,10 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Person")]
     public partial class Person
     {
         partial void Init();

+ 0 - 5
Jellyfin.Data/Entities/PersonRole.cs

@@ -1,15 +1,10 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("PersonRole")]
     public partial class PersonRole
     {
         partial void Init();

+ 1 - 7
Jellyfin.Data/Entities/Photo.cs

@@ -1,15 +1,9 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Photo")]
     public partial class Photo : LibraryItem
     {
         partial void Init();
@@ -17,7 +11,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected Photo() : base()
+        protected Photo()
         {
             PhotoMetadata = new HashSet<PhotoMetadata>();
             Releases = new HashSet<Release>();

+ 1 - 8
Jellyfin.Data/Entities/PhotoMetadata.cs

@@ -1,15 +1,8 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("PhotoMetadata")]
     public partial class PhotoMetadata : Metadata
     {
         partial void Init();
@@ -17,7 +10,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected PhotoMetadata() : base()
+        protected PhotoMetadata()
         {
             Init();
         }

+ 0 - 6
Jellyfin.Data/Entities/Preference.cs

@@ -1,15 +1,9 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Preference")]
     public partial class Preference
     {
         partial void Init();

+ 0 - 6
Jellyfin.Data/Entities/ProviderMapping.cs

@@ -1,15 +1,9 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("ProviderMapping")]
     public partial class ProviderMapping
     {
         partial void Init();

+ 0 - 6
Jellyfin.Data/Entities/Rating.cs

@@ -1,15 +1,9 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Rating")]
     public partial class Rating
     {
         partial void Init();

+ 0 - 6
Jellyfin.Data/Entities/RatingSource.cs

@@ -1,18 +1,12 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
     /// <summary>
     /// This is the entity to store review ratings, not age ratings
     /// </summary>
-    [Table("RatingSource")]
     public partial class RatingSource
     {
         partial void Init();

+ 0 - 5
Jellyfin.Data/Entities/Release.cs

@@ -1,15 +1,10 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Release")]
     public partial class Release
     {
         partial void Init();

+ 1 - 7
Jellyfin.Data/Entities/Season.cs

@@ -1,15 +1,9 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Season")]
     public partial class Season : LibraryItem
     {
         partial void Init();
@@ -17,7 +11,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected Season() : base()
+        protected Season()
         {
             // NOTE: This class has one-to-one associations with LibraryRoot, LibraryItem and CollectionItem.
             // One-to-one associations are not validated in constructors since this causes a scenario where each one must be constructed before the other.

+ 1 - 7
Jellyfin.Data/Entities/SeasonMetadata.cs

@@ -1,15 +1,9 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("SeasonMetadata")]
     public partial class SeasonMetadata : Metadata
     {
         partial void Init();
@@ -17,7 +11,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected SeasonMetadata() : base()
+        protected SeasonMetadata()
         {
             Init();
         }

+ 1 - 7
Jellyfin.Data/Entities/Series.cs

@@ -1,15 +1,9 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Series")]
     public partial class Series : LibraryItem
     {
         partial void Init();
@@ -17,7 +11,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected Series() : base()
+        protected Series()
         {
             SeriesMetadata = new HashSet<SeriesMetadata>();
             Seasons = new HashSet<Season>();

+ 1 - 6
Jellyfin.Data/Entities/SeriesMetadata.cs

@@ -1,15 +1,10 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("SeriesMetadata")]
     public partial class SeriesMetadata : Metadata
     {
         partial void Init();
@@ -17,7 +12,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected SeriesMetadata() : base()
+        protected SeriesMetadata()
         {
             Networks = new HashSet<Company>();
 

+ 1 - 7
Jellyfin.Data/Entities/Track.cs

@@ -1,15 +1,9 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("Track")]
     public partial class Track : LibraryItem
     {
         partial void Init();
@@ -17,7 +11,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected Track() : base()
+        protected Track()
         {
             // NOTE: This class has one-to-one associations with LibraryRoot, LibraryItem and CollectionItem.
             // One-to-one associations are not validated in constructors since this causes a scenario where each one must be constructed before the other.

+ 1 - 8
Jellyfin.Data/Entities/TrackMetadata.cs

@@ -1,15 +1,8 @@
 using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("TrackMetadata")]
     public partial class TrackMetadata : Metadata
     {
         partial void Init();
@@ -17,7 +10,7 @@ namespace Jellyfin.Data.Entities
         /// <summary>
         /// Default constructor. Protected due to required properties, but present because EF needs it.
         /// </summary>
-        protected TrackMetadata() : base()
+        protected TrackMetadata()
         {
             Init();
         }

+ 0 - 5
Jellyfin.Data/Entities/User.cs

@@ -1,15 +1,10 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
-using System.Linq;
-using System.Runtime.CompilerServices;
 
 namespace Jellyfin.Data.Entities
 {
-    [Table("User")]
     public partial class User
     {
         partial void Init();

+ 1 - 3
Jellyfin.Data/Enums/ArtKind.cs

@@ -1,8 +1,6 @@
-using System;
-
 namespace Jellyfin.Data.Enums
 {
-    public enum ArtKind : Int32
+    public enum ArtKind
     {
         Other,
         Poster,

+ 1 - 3
Jellyfin.Data/Enums/MediaFileKind.cs

@@ -1,8 +1,6 @@
-using System;
-
 namespace Jellyfin.Data.Enums
 {
-    public enum MediaFileKind : Int32
+    public enum MediaFileKind
     {
         Main,
         Sidecar,

+ 1 - 3
Jellyfin.Data/Enums/PermissionKind.cs

@@ -1,8 +1,6 @@
-using System;
-
 namespace Jellyfin.Data.Enums
 {
-    public enum PermissionKind : Int32
+    public enum PermissionKind
     {
         IsAdministrator,
         IsHidden,

+ 1 - 3
Jellyfin.Data/Enums/PersonRoleType.cs

@@ -1,8 +1,6 @@
-using System;
-
 namespace Jellyfin.Data.Enums
 {
-    public enum PersonRoleType : Int32
+    public enum PersonRoleType
     {
         Other,
         Director,

+ 1 - 3
Jellyfin.Data/Enums/PreferenceKind.cs

@@ -1,8 +1,6 @@
-using System;
-
 namespace Jellyfin.Data.Enums
 {
-    public enum PreferenceKind : Int32
+    public enum PreferenceKind
     {
         MaxParentalRating,
         BlockedTags,

+ 1 - 3
Jellyfin.Data/Enums/Weekday.cs

@@ -1,8 +1,6 @@
-using System;
-
 namespace Jellyfin.Data.Enums
 {
-    public enum Weekday : Int32
+    public enum Weekday
     {
         Sunday,
         Monday,

+ 9 - 0
Jellyfin.Data/ISavingChanges.cs

@@ -0,0 +1,9 @@
+#pragma warning disable CS1591
+
+namespace Jellyfin.Data
+{
+    public interface ISavingChanges
+    {
+        void OnSavingChanges();
+    }
+}

+ 34 - 0
Jellyfin.Server.Implementations/Jellyfin.Server.Implementations.csproj

@@ -0,0 +1,34 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
+    <GenerateDocumentationFile>true</GenerateDocumentationFile>
+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
+    <CodeAnalysisRuleSet>../jellyfin.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+
+  <!-- Code analysers-->
+  <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
+    <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8" PrivateAssets="All" />
+    <PackageReference Include="SerilogAnalyzer" Version="0.15.0" PrivateAssets="All" />
+    <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="All" />
+    <PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" Version="1.1.31" PrivateAssets="All" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Compile Include="..\SharedVersion.cs" />
+    <Compile Remove="Migrations\20200430214405_InitialSchema.cs" />
+    <Compile Remove="Migrations\20200430214405_InitialSchema.Designer.cs" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\Jellyfin.Data\Jellyfin.Data.csproj" />
+    <ProjectReference Include="..\MediaBrowser.Controller\MediaBrowser.Controller.csproj" />
+    <ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj" />
+  </ItemGroup>
+
+</Project>

+ 115 - 0
Jellyfin.Server.Implementations/JellyfinDb.cs

@@ -0,0 +1,115 @@
+#pragma warning disable CS1591
+#pragma warning disable SA1201 // Constuctors should not follow properties
+#pragma warning disable SA1516 // Elements should be followed by a blank line
+#pragma warning disable SA1623 // Property's documentation should begin with gets or sets
+#pragma warning disable SA1629 // Documentation should end with a period
+#pragma warning disable SA1648 // Inheritdoc should be used with inheriting class
+
+using System.Linq;
+using Jellyfin.Data;
+using Jellyfin.Data.Entities;
+using Microsoft.EntityFrameworkCore;
+
+namespace Jellyfin.Server.Implementations
+{
+    /// <inheritdoc/>
+    public partial class JellyfinDb : DbContext
+    {
+        /*public virtual DbSet<Artwork> Artwork { get; set; }
+        public virtual DbSet<Book> Books { get; set; }
+        public virtual DbSet<BookMetadata> BookMetadata { get; set; }
+        public virtual DbSet<Chapter> Chapters { get; set; }
+        public virtual DbSet<Collection> Collections { get; set; }
+        public virtual DbSet<CollectionItem> CollectionItems { get; set; }
+        public virtual DbSet<Company> Companies { get; set; }
+        public virtual DbSet<CompanyMetadata> CompanyMetadata { get; set; }
+        public virtual DbSet<CustomItem> CustomItems { get; set; }
+        public virtual DbSet<CustomItemMetadata> CustomItemMetadata { get; set; }
+        public virtual DbSet<Episode> Episodes { get; set; }
+        public virtual DbSet<EpisodeMetadata> EpisodeMetadata { get; set; }
+        public virtual DbSet<Genre> Genres { get; set; }
+        public virtual DbSet<Group> Groups { get; set; }
+        public virtual DbSet<Library> Libraries { get; set; }
+        public virtual DbSet<LibraryItem> LibraryItems { get; set; }
+        public virtual DbSet<LibraryRoot> LibraryRoot { get; set; }
+        public virtual DbSet<MediaFile> MediaFiles { get; set; }
+        public virtual DbSet<MediaFileStream> MediaFileStream { get; set; }
+        public virtual DbSet<Metadata> Metadata { get; set; }
+        public virtual DbSet<MetadataProvider> MetadataProviders { get; set; }
+        public virtual DbSet<MetadataProviderId> MetadataProviderIds { get; set; }
+        public virtual DbSet<Movie> Movies { get; set; }
+        public virtual DbSet<MovieMetadata> MovieMetadata { get; set; }
+        public virtual DbSet<MusicAlbum> MusicAlbums { get; set; }
+        public virtual DbSet<MusicAlbumMetadata> MusicAlbumMetadata { get; set; }
+        public virtual DbSet<Permission> Permissions { get; set; }
+        public virtual DbSet<Person> People { get; set; }
+        public virtual DbSet<PersonRole> PersonRoles { get; set; }
+        public virtual DbSet<Photo> Photo { get; set; }
+        public virtual DbSet<PhotoMetadata> PhotoMetadata { get; set; }
+        public virtual DbSet<Preference> Preferences { get; set; }
+        public virtual DbSet<ProviderMapping> ProviderMappings { get; set; }
+        public virtual DbSet<Rating> Ratings { get; set; }
+        /// <summary>
+        /// Repository for global::Jellyfin.Data.Entities.RatingSource - This is the entity to
+        /// store review ratings, not age ratings
+        /// </summary>
+        public virtual DbSet<RatingSource> RatingSources { get; set; }
+        public virtual DbSet<Release> Releases { get; set; }
+        public virtual DbSet<Season> Seasons { get; set; }
+        public virtual DbSet<SeasonMetadata> SeasonMetadata { get; set; }
+        public virtual DbSet<Series> Series { get; set; }
+        public virtual DbSet<SeriesMetadata> SeriesMetadata { get; set; }
+        public virtual DbSet<Track> Tracks { get; set; }
+        public virtual DbSet<TrackMetadata> TrackMetadata { get; set; }
+        public virtual DbSet<User> Users { get; set; } */
+
+        /// <summary>
+        /// Gets or sets the default connection string.
+        /// </summary>
+        public static string ConnectionString { get; set; } = @"Data Source=jellyfin.db";
+
+        /// <inheritdoc />
+        public JellyfinDb(DbContextOptions<JellyfinDb> options) : base(options)
+        {
+        }
+
+        partial void CustomInit(DbContextOptionsBuilder optionsBuilder);
+
+        /// <inheritdoc />
+        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+        {
+            CustomInit(optionsBuilder);
+        }
+
+        partial void OnModelCreatingImpl(ModelBuilder modelBuilder);
+        partial void OnModelCreatedImpl(ModelBuilder modelBuilder);
+
+        /// <inheritdoc />
+        protected override void OnModelCreating(ModelBuilder modelBuilder)
+        {
+            base.OnModelCreating(modelBuilder);
+            OnModelCreatingImpl(modelBuilder);
+
+            modelBuilder.HasDefaultSchema("jellyfin");
+
+            /*modelBuilder.Entity<Artwork>().HasIndex(t => t.Kind);
+            modelBuilder.Entity<Genre>().HasIndex(t => t.Name)
+                        .IsUnique();
+            modelBuilder.Entity<LibraryItem>().HasIndex(t => t.UrlId)
+                        .IsUnique();*/
+
+            OnModelCreatedImpl(modelBuilder);
+        }
+
+        public override int SaveChanges()
+        {
+            foreach (var entity in ChangeTracker.Entries().Where(e => e.State == EntityState.Modified))
+            {
+                var saveEntity = entity.Entity as ISavingChanges;
+                saveEntity.OnSavingChanges();
+            }
+
+            return base.SaveChanges();
+        }
+    }
+}

+ 6 - 0
MediaBrowser.sln

@@ -64,6 +64,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jellyfin.Controller.Tests",
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jellyfin.Data", "Jellyfin.Data\Jellyfin.Data.csproj", "{F03299F2-469F-40EF-A655-3766F97A5702}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jellyfin.Server.Implementations", "Jellyfin.Server.Implementations\Jellyfin.Server.Implementations.csproj", "{22C7DA3A-94F2-4E86-9CE6-86AB02B4F843}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -182,6 +184,10 @@ Global
 		{F03299F2-469F-40EF-A655-3766F97A5702}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{F03299F2-469F-40EF-A655-3766F97A5702}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F03299F2-469F-40EF-A655-3766F97A5702}.Release|Any CPU.Build.0 = Release|Any CPU
+		{22C7DA3A-94F2-4E86-9CE6-86AB02B4F843}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{22C7DA3A-94F2-4E86-9CE6-86AB02B4F843}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{22C7DA3A-94F2-4E86-9CE6-86AB02B4F843}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{22C7DA3A-94F2-4E86-9CE6-86AB02B4F843}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE