Bladeren bron

Merge pull request #4018 from barronpm/library-entity-cleanup

Library Entity Cleanup
Bond-009 4 jaren geleden
bovenliggende
commit
9a2f2aac22
90 gewijzigde bestanden met toevoegingen van 2566 en 6446 verwijderingen
  1. 1 1
      Jellyfin.Api/Controllers/ItemsController.cs
  2. 1 2
      Jellyfin.Api/Controllers/LibraryController.cs
  3. 2 1
      Jellyfin.Api/Controllers/MoviesController.cs
  4. 2 1
      Jellyfin.Data/Entities/ActivityLog.cs
  5. 0 210
      Jellyfin.Data/Entities/Artwork.cs
  6. 0 72
      Jellyfin.Data/Entities/Book.cs
  7. 0 125
      Jellyfin.Data/Entities/BookMetadata.cs
  8. 0 277
      Jellyfin.Data/Entities/Chapter.cs
  9. 0 123
      Jellyfin.Data/Entities/Collection.cs
  10. 0 156
      Jellyfin.Data/Entities/CollectionItem.cs
  11. 0 159
      Jellyfin.Data/Entities/Company.cs
  12. 0 236
      Jellyfin.Data/Entities/CompanyMetadata.cs
  13. 0 71
      Jellyfin.Data/Entities/CustomItem.cs
  14. 0 83
      Jellyfin.Data/Entities/CustomItemMetadata.cs
  15. 0 118
      Jellyfin.Data/Entities/Episode.cs
  16. 0 198
      Jellyfin.Data/Entities/EpisodeMetadata.cs
  17. 0 162
      Jellyfin.Data/Entities/Genre.cs
  18. 2 1
      Jellyfin.Data/Entities/Group.cs
  19. 81 0
      Jellyfin.Data/Entities/Libraries/Artwork.cs
  20. 28 0
      Jellyfin.Data/Entities/Libraries/Book.cs
  21. 55 0
      Jellyfin.Data/Entities/Libraries/BookMetadata.cs
  22. 102 0
      Jellyfin.Data/Entities/Libraries/Chapter.cs
  23. 55 0
      Jellyfin.Data/Entities/Libraries/Collection.cs
  24. 94 0
      Jellyfin.Data/Entities/Libraries/CollectionItem.cs
  25. 67 0
      Jellyfin.Data/Entities/Libraries/Company.cs
  26. 74 0
      Jellyfin.Data/Entities/Libraries/CompanyMetadata.cs
  27. 28 0
      Jellyfin.Data/Entities/Libraries/CustomItem.cs
  28. 36 0
      Jellyfin.Data/Entities/Libraries/CustomItemMetadata.cs
  29. 52 0
      Jellyfin.Data/Entities/Libraries/Episode.cs
  30. 67 0
      Jellyfin.Data/Entities/Libraries/EpisodeMetadata.cs
  31. 75 0
      Jellyfin.Data/Entities/Libraries/Genre.cs
  32. 76 0
      Jellyfin.Data/Entities/Libraries/Library.cs
  33. 63 0
      Jellyfin.Data/Entities/Libraries/LibraryItem.cs
  34. 94 0
      Jellyfin.Data/Entities/Libraries/MediaFile.cs
  35. 67 0
      Jellyfin.Data/Entities/Libraries/MediaFileStream.cs
  36. 165 0
      Jellyfin.Data/Entities/Libraries/Metadata.cs
  37. 67 0
      Jellyfin.Data/Entities/Libraries/MetadataProvider.cs
  38. 83 0
      Jellyfin.Data/Entities/Libraries/MetadataProviderId.cs
  39. 28 0
      Jellyfin.Data/Entities/Libraries/Movie.cs
  40. 85 0
      Jellyfin.Data/Entities/Libraries/MovieMetadata.cs
  41. 29 0
      Jellyfin.Data/Entities/Libraries/MusicAlbum.cs
  42. 69 0
      Jellyfin.Data/Entities/Libraries/MusicAlbumMetadata.cs
  43. 103 0
      Jellyfin.Data/Entities/Libraries/Person.cs
  44. 98 0
      Jellyfin.Data/Entities/Libraries/PersonRole.cs
  45. 28 0
      Jellyfin.Data/Entities/Libraries/Photo.cs
  46. 36 0
      Jellyfin.Data/Entities/Libraries/PhotoMetadata.cs
  47. 78 0
      Jellyfin.Data/Entities/Libraries/Rating.cs
  48. 92 0
      Jellyfin.Data/Entities/Libraries/RatingSource.cs
  49. 84 0
      Jellyfin.Data/Entities/Libraries/Release.cs
  50. 53 0
      Jellyfin.Data/Entities/Libraries/Season.cs
  51. 47 0
      Jellyfin.Data/Entities/Libraries/SeasonMetadata.cs
  52. 46 0
      Jellyfin.Data/Entities/Libraries/Series.cs
  53. 91 0
      Jellyfin.Data/Entities/Libraries/SeriesMetadata.cs
  54. 52 0
      Jellyfin.Data/Entities/Libraries/Track.cs
  55. 36 0
      Jellyfin.Data/Entities/Libraries/TrackMetadata.cs
  56. 0 153
      Jellyfin.Data/Entities/Library.cs
  57. 0 175
      Jellyfin.Data/Entities/LibraryItem.cs
  58. 0 199
      Jellyfin.Data/Entities/LibraryRoot.cs
  59. 0 212
      Jellyfin.Data/Entities/MediaFile.cs
  60. 0 155
      Jellyfin.Data/Entities/MediaFileStream.cs
  61. 0 399
      Jellyfin.Data/Entities/Metadata.cs
  62. 0 153
      Jellyfin.Data/Entities/MetadataProvider.cs
  63. 0 201
      Jellyfin.Data/Entities/MetadataProviderId.cs
  64. 0 72
      Jellyfin.Data/Entities/Movie.cs
  65. 0 244
      Jellyfin.Data/Entities/MovieMetadata.cs
  66. 0 71
      Jellyfin.Data/Entities/MusicAlbum.cs
  67. 0 207
      Jellyfin.Data/Entities/MusicAlbumMetadata.cs
  68. 2 1
      Jellyfin.Data/Entities/Permission.cs
  69. 0 317
      Jellyfin.Data/Entities/Person.cs
  70. 0 217
      Jellyfin.Data/Entities/PersonRole.cs
  71. 0 71
      Jellyfin.Data/Entities/Photo.cs
  72. 0 84
      Jellyfin.Data/Entities/PhotoMetadata.cs
  73. 2 1
      Jellyfin.Data/Entities/Preference.cs
  74. 0 194
      Jellyfin.Data/Entities/Rating.cs
  75. 0 239
      Jellyfin.Data/Entities/RatingSource.cs
  76. 0 219
      Jellyfin.Data/Entities/Release.cs
  77. 0 119
      Jellyfin.Data/Entities/Season.cs
  78. 0 123
      Jellyfin.Data/Entities/SeasonMetadata.cs
  79. 0 165
      Jellyfin.Data/Entities/Series.cs
  80. 0 244
      Jellyfin.Data/Entities/SeriesMetadata.cs
  81. 0 120
      Jellyfin.Data/Entities/Track.cs
  82. 0 83
      Jellyfin.Data/Entities/TrackMetadata.cs
  83. 2 1
      Jellyfin.Data/Entities/User.cs
  84. 0 9
      Jellyfin.Data/ISavingChanges.cs
  85. 16 0
      Jellyfin.Data/Interfaces/IHasArtwork.cs
  86. 16 0
      Jellyfin.Data/Interfaces/IHasCompanies.cs
  87. 18 0
      Jellyfin.Data/Interfaces/IHasConcurrencyToken.cs
  88. 0 0
      Jellyfin.Data/Interfaces/IHasPermissions.cs
  89. 16 0
      Jellyfin.Data/Interfaces/IHasReleases.cs
  90. 2 2
      Jellyfin.Server.Implementations/JellyfinDb.cs

+ 1 - 1
Jellyfin.Api/Controllers/ItemsController.cs

@@ -4,10 +4,10 @@ using System.Linq;
 using Jellyfin.Api.Constants;
 using Jellyfin.Api.Extensions;
 using Jellyfin.Api.Helpers;
-using Jellyfin.Data.Entities;
 using Jellyfin.Data.Enums;
 using MediaBrowser.Controller.Dto;
 using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Model.Dto;
 using MediaBrowser.Model.Entities;

+ 1 - 2
Jellyfin.Api/Controllers/LibraryController.cs

@@ -19,6 +19,7 @@ using MediaBrowser.Controller.Dto;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Entities.Movies;
+using MediaBrowser.Controller.Entities.TV;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.LiveTv;
 using MediaBrowser.Controller.Net;
@@ -35,8 +36,6 @@ using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.Extensions.Logging;
 using Book = MediaBrowser.Controller.Entities.Book;
-using Movie = Jellyfin.Data.Entities.Movie;
-using MusicAlbum = Jellyfin.Data.Entities.MusicAlbum;
 
 namespace Jellyfin.Api.Controllers
 {

+ 2 - 1
Jellyfin.Api/Controllers/MoviesController.cs

@@ -10,6 +10,7 @@ using MediaBrowser.Common.Extensions;
 using MediaBrowser.Controller.Configuration;
 using MediaBrowser.Controller.Dto;
 using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Movies;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.LiveTv;
 using MediaBrowser.Model.Dto;
@@ -181,7 +182,7 @@ namespace Jellyfin.Api.Controllers
             DtoOptions dtoOptions,
             RecommendationType type)
         {
-            var itemTypes = new List<string> { nameof(MediaBrowser.Controller.Entities.Movies.Movie) };
+            var itemTypes = new List<string> { nameof(Movie) };
             if (_serverConfigurationManager.Configuration.EnableExternalContentInSuggestions)
             {
                 itemTypes.Add(nameof(Trailer));

+ 2 - 1
Jellyfin.Data/Entities/ActivityLog.cs

@@ -3,6 +3,7 @@
 using System;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
 using Microsoft.Extensions.Logging;
 
 namespace Jellyfin.Data.Entities
@@ -10,7 +11,7 @@ namespace Jellyfin.Data.Entities
     /// <summary>
     /// An entity referencing an activity log entry.
     /// </summary>
-    public partial class ActivityLog : ISavingChanges
+    public partial class ActivityLog : IHasConcurrencyToken
     {
         /// <summary>
         /// Initializes a new instance of the <see cref="ActivityLog"/> class.

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

@@ -1,210 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.ComponentModel.DataAnnotations;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class Artwork
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected Artwork()
-        {
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static Artwork CreateArtworkUnsafe()
-        {
-            return new Artwork();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="path"></param>
-        /// <param name="kind"></param>
-        /// <param name="_metadata0"></param>
-        /// <param name="_personrole1"></param>
-        public Artwork(string path, Enums.ArtKind kind, Metadata _metadata0, PersonRole _personrole1)
-        {
-            if (string.IsNullOrEmpty(path))
-            {
-                throw new ArgumentNullException(nameof(path));
-            }
-
-            this.Path = path;
-
-            this.Kind = kind;
-
-            if (_metadata0 == null)
-            {
-                throw new ArgumentNullException(nameof(_metadata0));
-            }
-
-            _metadata0.Artwork.Add(this);
-
-            if (_personrole1 == null)
-            {
-                throw new ArgumentNullException(nameof(_personrole1));
-            }
-
-            _personrole1.Artwork = this;
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="path"></param>
-        /// <param name="kind"></param>
-        /// <param name="_metadata0"></param>
-        /// <param name="_personrole1"></param>
-        public static Artwork Create(string path, Enums.ArtKind kind, Metadata _metadata0, PersonRole _personrole1)
-        {
-            return new Artwork(path, kind, _metadata0, _personrole1);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Path.
-        /// </summary>
-        protected string _Path;
-        /// <summary>
-        /// When provided in a partial class, allows value of Path to be changed before setting.
-        /// </summary>
-        partial void SetPath(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Path to be changed before returning.
-        /// </summary>
-        partial void GetPath(ref string result);
-
-        /// <summary>
-        /// Required, Max length = 65535
-        /// </summary>
-        [Required]
-        [MaxLength(65535)]
-        [StringLength(65535)]
-        public string Path
-        {
-            get
-            {
-                string value = _Path;
-                GetPath(ref value);
-                return _Path = value;
-            }
-
-            set
-            {
-                string oldValue = _Path;
-                SetPath(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Path = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Kind.
-        /// </summary>
-        internal Enums.ArtKind _Kind;
-        /// <summary>
-        /// When provided in a partial class, allows value of Kind to be changed before setting.
-        /// </summary>
-        partial void SetKind(Enums.ArtKind oldValue, ref Enums.ArtKind newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Kind to be changed before returning.
-        /// </summary>
-        partial void GetKind(ref Enums.ArtKind result);
-
-        /// <summary>
-        /// Indexed, Required.
-        /// </summary>
-        [Required]
-        public Enums.ArtKind Kind
-        {
-            get
-            {
-                Enums.ArtKind value = _Kind;
-                GetKind(ref value);
-                return _Kind = value;
-            }
-
-            set
-            {
-                Enums.ArtKind oldValue = _Kind;
-                SetKind(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Kind = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-    }
-}
-

+ 0 - 72
Jellyfin.Data/Entities/Book.cs

@@ -1,72 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class Book : LibraryItem
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected Book()
-        {
-            BookMetadata = new HashSet<BookMetadata>();
-            Releases = new HashSet<Release>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static Book CreateBookUnsafe()
-        {
-            return new Book();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        public Book(Guid urlid, DateTime dateadded)
-        {
-            this.UrlId = urlid;
-
-            this.BookMetadata = new HashSet<BookMetadata>();
-            this.Releases = new HashSet<Release>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        public static Book Create(Guid urlid, DateTime dateadded)
-        {
-            return new Book(urlid, dateadded);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-
-        [ForeignKey("BookMetadata_BookMetadata_Id")]
-        public virtual ICollection<BookMetadata> BookMetadata { get; protected set; }
-
-        [ForeignKey("Release_Releases_Id")]
-        public virtual ICollection<Release> Releases { get; protected set; }
-    }
-}
-

+ 0 - 125
Jellyfin.Data/Entities/BookMetadata.cs

@@ -1,125 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class BookMetadata : Metadata
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected BookMetadata()
-        {
-            Publishers = new HashSet<Company>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static BookMetadata CreateBookMetadataUnsafe()
-        {
-            return new BookMetadata();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_book0"></param>
-        public BookMetadata(string title, string language, DateTime dateadded, DateTime datemodified, Book _book0)
-        {
-            if (string.IsNullOrEmpty(title))
-            {
-                throw new ArgumentNullException(nameof(title));
-            }
-
-            this.Title = title;
-
-            if (string.IsNullOrEmpty(language))
-            {
-                throw new ArgumentNullException(nameof(language));
-            }
-
-            this.Language = language;
-
-            if (_book0 == null)
-            {
-                throw new ArgumentNullException(nameof(_book0));
-            }
-
-            _book0.BookMetadata.Add(this);
-
-            this.Publishers = new HashSet<Company>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_book0"></param>
-        public static BookMetadata Create(string title, string language, DateTime dateadded, DateTime datemodified, Book _book0)
-        {
-            return new BookMetadata(title, language, dateadded, datemodified, _book0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for ISBN.
-        /// </summary>
-        protected long? _ISBN;
-        /// <summary>
-        /// When provided in a partial class, allows value of ISBN to be changed before setting.
-        /// </summary>
-        partial void SetISBN(long? oldValue, ref long? newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of ISBN to be changed before returning.
-        /// </summary>
-        partial void GetISBN(ref long? result);
-
-        public long? ISBN
-        {
-            get
-            {
-                long? value = _ISBN;
-                GetISBN(ref value);
-                return _ISBN = value;
-            }
-
-            set
-            {
-                long? oldValue = _ISBN;
-                SetISBN(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _ISBN = value;
-                }
-            }
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-
-        [ForeignKey("Company_Publishers_Id")]
-        public virtual ICollection<Company> Publishers { get; protected set; }
-    }
-}
-

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

@@ -1,277 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class Chapter
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected Chapter()
-        {
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static Chapter CreateChapterUnsafe()
-        {
-            return new Chapter();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="timestart"></param>
-        /// <param name="_release0"></param>
-        public Chapter(string language, long timestart, Release _release0)
-        {
-            if (string.IsNullOrEmpty(language))
-            {
-                throw new ArgumentNullException(nameof(language));
-            }
-
-            this.Language = language;
-
-            this.TimeStart = timestart;
-
-            if (_release0 == null)
-            {
-                throw new ArgumentNullException(nameof(_release0));
-            }
-
-            _release0.Chapters.Add(this);
-
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="timestart"></param>
-        /// <param name="_release0"></param>
-        public static Chapter Create(string language, long timestart, Release _release0)
-        {
-            return new Chapter(language, timestart, _release0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Name.
-        /// </summary>
-        protected string _Name;
-        /// <summary>
-        /// When provided in a partial class, allows value of Name to be changed before setting.
-        /// </summary>
-        partial void SetName(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Name to be changed before returning.
-        /// </summary>
-        partial void GetName(ref string result);
-
-        /// <summary>
-        /// Max length = 1024
-        /// </summary>
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string Name
-        {
-            get
-            {
-                string value = _Name;
-                GetName(ref value);
-                return _Name = value;
-            }
-
-            set
-            {
-                string oldValue = _Name;
-                SetName(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Name = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Language.
-        /// </summary>
-        protected string _Language;
-        /// <summary>
-        /// When provided in a partial class, allows value of Language to be changed before setting.
-        /// </summary>
-        partial void SetLanguage(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Language to be changed before returning.
-        /// </summary>
-        partial void GetLanguage(ref string result);
-
-        /// <summary>
-        /// Required, Min length = 3, Max length = 3
-        /// ISO-639-3 3-character language codes.
-        /// </summary>
-        [Required]
-        [MinLength(3)]
-        [MaxLength(3)]
-        [StringLength(3)]
-        public string Language
-        {
-            get
-            {
-                string value = _Language;
-                GetLanguage(ref value);
-                return _Language = value;
-            }
-
-            set
-            {
-                string oldValue = _Language;
-                SetLanguage(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Language = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for TimeStart.
-        /// </summary>
-        protected long _TimeStart;
-        /// <summary>
-        /// When provided in a partial class, allows value of TimeStart to be changed before setting.
-        /// </summary>
-        partial void SetTimeStart(long oldValue, ref long newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of TimeStart to be changed before returning.
-        /// </summary>
-        partial void GetTimeStart(ref long result);
-
-        /// <summary>
-        /// Required.
-        /// </summary>
-        [Required]
-        public long TimeStart
-        {
-            get
-            {
-                long value = _TimeStart;
-                GetTimeStart(ref value);
-                return _TimeStart = value;
-            }
-
-            set
-            {
-                long oldValue = _TimeStart;
-                SetTimeStart(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _TimeStart = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for TimeEnd.
-        /// </summary>
-        protected long? _TimeEnd;
-        /// <summary>
-        /// When provided in a partial class, allows value of TimeEnd to be changed before setting.
-        /// </summary>
-        partial void SetTimeEnd(long? oldValue, ref long? newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of TimeEnd to be changed before returning.
-        /// </summary>
-        partial void GetTimeEnd(ref long? result);
-
-        public long? TimeEnd
-        {
-            get
-            {
-                long? value = _TimeEnd;
-                GetTimeEnd(ref value);
-                return _TimeEnd = value;
-            }
-
-            set
-            {
-                long? oldValue = _TimeEnd;
-                SetTimeEnd(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _TimeEnd = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-    }
-}
-

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

@@ -1,123 +0,0 @@
-#pragma warning disable CS1591
-
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class Collection
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor.
-        /// </summary>
-        public Collection()
-        {
-            CollectionItem = new LinkedList<CollectionItem>();
-
-            Init();
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Name.
-        /// </summary>
-        protected string _Name;
-        /// <summary>
-        /// When provided in a partial class, allows value of Name to be changed before setting.
-        /// </summary>
-        partial void SetName(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Name to be changed before returning.
-        /// </summary>
-        partial void GetName(ref string result);
-
-        /// <summary>
-        /// Max length = 1024
-        /// </summary>
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string Name
-        {
-            get
-            {
-                string value = _Name;
-                GetName(ref value);
-                return _Name = value;
-            }
-
-            set
-            {
-                string oldValue = _Name;
-                SetName(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Name = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-        [ForeignKey("CollectionItem_CollectionItem_Id")]
-        public virtual ICollection<CollectionItem> CollectionItem { get; protected set; }
-    }
-}
-

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

@@ -1,156 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class CollectionItem
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected CollectionItem()
-        {
-            // NOTE: This class has one-to-one associations with CollectionItem.
-            // One-to-one associations are not validated in constructors since this causes a scenario where each one must be constructed before the other.
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static CollectionItem CreateCollectionItemUnsafe()
-        {
-            return new CollectionItem();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="_collection0"></param>
-        /// <param name="_collectionitem1"></param>
-        /// <param name="_collectionitem2"></param>
-        public CollectionItem(Collection _collection0, CollectionItem _collectionitem1, CollectionItem _collectionitem2)
-        {
-            // NOTE: This class has one-to-one associations with CollectionItem.
-            // One-to-one associations are not validated in constructors since this causes a scenario where each one must be constructed before the other.
-
-            if (_collection0 == null)
-            {
-                throw new ArgumentNullException(nameof(_collection0));
-            }
-
-            _collection0.CollectionItem.Add(this);
-
-            if (_collectionitem1 == null)
-            {
-                throw new ArgumentNullException(nameof(_collectionitem1));
-            }
-
-            _collectionitem1.Next = this;
-
-            if (_collectionitem2 == null)
-            {
-                throw new ArgumentNullException(nameof(_collectionitem2));
-            }
-
-            _collectionitem2.Previous = this;
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="_collection0"></param>
-        /// <param name="_collectionitem1"></param>
-        /// <param name="_collectionitem2"></param>
-        public static CollectionItem Create(Collection _collection0, CollectionItem _collectionitem1, CollectionItem _collectionitem2)
-        {
-            return new CollectionItem(_collection0, _collectionitem1, _collectionitem2);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Required.
-        /// </summary>
-        [ForeignKey("LibraryItem_Id")]
-        public virtual LibraryItem LibraryItem { get; set; }
-
-        /// <remarks>
-        /// TODO check if this properly updated dependant and has the proper principal relationship
-        /// </remarks>
-        [ForeignKey("CollectionItem_Next_Id")]
-        public virtual CollectionItem Next { get; set; }
-
-        /// <remarks>
-        /// TODO check if this properly updated dependant and has the proper principal relationship
-        /// </remarks>
-        [ForeignKey("CollectionItem_Previous_Id")]
-        public virtual CollectionItem Previous { get; set; }
-    }
-}
-

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

@@ -1,159 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class Company
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected Company()
-        {
-            CompanyMetadata = new HashSet<CompanyMetadata>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static Company CreateCompanyUnsafe()
-        {
-            return new Company();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="_moviemetadata0"></param>
-        /// <param name="_seriesmetadata1"></param>
-        /// <param name="_musicalbummetadata2"></param>
-        /// <param name="_bookmetadata3"></param>
-        /// <param name="_company4"></param>
-        public Company(MovieMetadata _moviemetadata0, SeriesMetadata _seriesmetadata1, MusicAlbumMetadata _musicalbummetadata2, BookMetadata _bookmetadata3, Company _company4)
-        {
-            if (_moviemetadata0 == null)
-            {
-                throw new ArgumentNullException(nameof(_moviemetadata0));
-            }
-
-            _moviemetadata0.Studios.Add(this);
-
-            if (_seriesmetadata1 == null)
-            {
-                throw new ArgumentNullException(nameof(_seriesmetadata1));
-            }
-
-            _seriesmetadata1.Networks.Add(this);
-
-            if (_musicalbummetadata2 == null)
-            {
-                throw new ArgumentNullException(nameof(_musicalbummetadata2));
-            }
-
-            _musicalbummetadata2.Labels.Add(this);
-
-            if (_bookmetadata3 == null)
-            {
-                throw new ArgumentNullException(nameof(_bookmetadata3));
-            }
-
-            _bookmetadata3.Publishers.Add(this);
-
-            if (_company4 == null)
-            {
-                throw new ArgumentNullException(nameof(_company4));
-            }
-
-            _company4.Parent = this;
-
-            this.CompanyMetadata = new HashSet<CompanyMetadata>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="_moviemetadata0"></param>
-        /// <param name="_seriesmetadata1"></param>
-        /// <param name="_musicalbummetadata2"></param>
-        /// <param name="_bookmetadata3"></param>
-        /// <param name="_company4"></param>
-        public static Company Create(MovieMetadata _moviemetadata0, SeriesMetadata _seriesmetadata1, MusicAlbumMetadata _musicalbummetadata2, BookMetadata _bookmetadata3, Company _company4)
-        {
-            return new Company(_moviemetadata0, _seriesmetadata1, _musicalbummetadata2, _bookmetadata3, _company4);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-        [ForeignKey("CompanyMetadata_CompanyMetadata_Id")]
-        public virtual ICollection<CompanyMetadata> CompanyMetadata { get; protected set; }
-        [ForeignKey("Company_Parent_Id")]
-        public virtual Company Parent { get; set; }
-    }
-}
-

+ 0 - 236
Jellyfin.Data/Entities/CompanyMetadata.cs

@@ -1,236 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.ComponentModel.DataAnnotations;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class CompanyMetadata : Metadata
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected CompanyMetadata()
-        {
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static CompanyMetadata CreateCompanyMetadataUnsafe()
-        {
-            return new CompanyMetadata();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_company0"></param>
-        public CompanyMetadata(string title, string language, DateTime dateadded, DateTime datemodified, Company _company0)
-        {
-            if (string.IsNullOrEmpty(title))
-            {
-                throw new ArgumentNullException(nameof(title));
-            }
-
-            this.Title = title;
-
-            if (string.IsNullOrEmpty(language))
-            {
-                throw new ArgumentNullException(nameof(language));
-            }
-
-            this.Language = language;
-
-            if (_company0 == null)
-            {
-                throw new ArgumentNullException(nameof(_company0));
-            }
-
-            _company0.CompanyMetadata.Add(this);
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_company0"></param>
-        public static CompanyMetadata Create(string title, string language, DateTime dateadded, DateTime datemodified, Company _company0)
-        {
-            return new CompanyMetadata(title, language, dateadded, datemodified, _company0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Description.
-        /// </summary>
-        protected string _Description;
-        /// <summary>
-        /// When provided in a partial class, allows value of Description to be changed before setting.
-        /// </summary>
-        partial void SetDescription(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Description to be changed before returning.
-        /// </summary>
-        partial void GetDescription(ref string result);
-
-        /// <summary>
-        /// Max length = 65535
-        /// </summary>
-        [MaxLength(65535)]
-        [StringLength(65535)]
-        public string Description
-        {
-            get
-            {
-                string value = _Description;
-                GetDescription(ref value);
-                return _Description = value;
-            }
-
-            set
-            {
-                string oldValue = _Description;
-                SetDescription(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Description = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Headquarters.
-        /// </summary>
-        protected string _Headquarters;
-        /// <summary>
-        /// When provided in a partial class, allows value of Headquarters to be changed before setting.
-        /// </summary>
-        partial void SetHeadquarters(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Headquarters to be changed before returning.
-        /// </summary>
-        partial void GetHeadquarters(ref string result);
-
-        /// <summary>
-        /// Max length = 255
-        /// </summary>
-        [MaxLength(255)]
-        [StringLength(255)]
-        public string Headquarters
-        {
-            get
-            {
-                string value = _Headquarters;
-                GetHeadquarters(ref value);
-                return _Headquarters = value;
-            }
-
-            set
-            {
-                string oldValue = _Headquarters;
-                SetHeadquarters(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Headquarters = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Country.
-        /// </summary>
-        protected string _Country;
-        /// <summary>
-        /// When provided in a partial class, allows value of Country to be changed before setting.
-        /// </summary>
-        partial void SetCountry(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Country to be changed before returning.
-        /// </summary>
-        partial void GetCountry(ref string result);
-
-        /// <summary>
-        /// Max length = 2
-        /// </summary>
-        [MaxLength(2)]
-        [StringLength(2)]
-        public string Country
-        {
-            get
-            {
-                string value = _Country;
-                GetCountry(ref value);
-                return _Country = value;
-            }
-
-            set
-            {
-                string oldValue = _Country;
-                SetCountry(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Country = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Homepage.
-        /// </summary>
-        protected string _Homepage;
-        /// <summary>
-        /// When provided in a partial class, allows value of Homepage to be changed before setting.
-        /// </summary>
-        partial void SetHomepage(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Homepage to be changed before returning.
-        /// </summary>
-        partial void GetHomepage(ref string result);
-
-        /// <summary>
-        /// Max length = 1024
-        /// </summary>
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string Homepage
-        {
-            get
-            {
-                string value = _Homepage;
-                GetHomepage(ref value);
-                return _Homepage = value;
-            }
-
-            set
-            {
-                string oldValue = _Homepage;
-                SetHomepage(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Homepage = value;
-                }
-            }
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-    }
-}
-

+ 0 - 71
Jellyfin.Data/Entities/CustomItem.cs

@@ -1,71 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class CustomItem : LibraryItem
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected CustomItem()
-        {
-            CustomItemMetadata = new HashSet<CustomItemMetadata>();
-            Releases = new HashSet<Release>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static CustomItem CreateCustomItemUnsafe()
-        {
-            return new CustomItem();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        public CustomItem(Guid urlid, DateTime dateadded)
-        {
-            this.UrlId = urlid;
-
-            this.CustomItemMetadata = new HashSet<CustomItemMetadata>();
-            this.Releases = new HashSet<Release>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        public static CustomItem Create(Guid urlid, DateTime dateadded)
-        {
-            return new CustomItem(urlid, dateadded);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-        [ForeignKey("CustomItemMetadata_CustomItemMetadata_Id")]
-        public virtual ICollection<CustomItemMetadata> CustomItemMetadata { get; protected set; }
-
-        [ForeignKey("Release_Releases_Id")]
-        public virtual ICollection<Release> Releases { get; protected set; }
-    }
-}
-

+ 0 - 83
Jellyfin.Data/Entities/CustomItemMetadata.cs

@@ -1,83 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class CustomItemMetadata : Metadata
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected CustomItemMetadata()
-        {
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static CustomItemMetadata CreateCustomItemMetadataUnsafe()
-        {
-            return new CustomItemMetadata();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_customitem0"></param>
-        public CustomItemMetadata(string title, string language, DateTime dateadded, DateTime datemodified, CustomItem _customitem0)
-        {
-            if (string.IsNullOrEmpty(title))
-            {
-                throw new ArgumentNullException(nameof(title));
-            }
-
-            this.Title = title;
-
-            if (string.IsNullOrEmpty(language))
-            {
-                throw new ArgumentNullException(nameof(language));
-            }
-
-            this.Language = language;
-
-            if (_customitem0 == null)
-            {
-                throw new ArgumentNullException(nameof(_customitem0));
-            }
-
-            _customitem0.CustomItemMetadata.Add(this);
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_customitem0"></param>
-        public static CustomItemMetadata Create(string title, string language, DateTime dateadded, DateTime datemodified, CustomItem _customitem0)
-        {
-            return new CustomItemMetadata(title, language, dateadded, datemodified, _customitem0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-    }
-}
-

+ 0 - 118
Jellyfin.Data/Entities/Episode.cs

@@ -1,118 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class Episode : LibraryItem
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        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.
-
-            Releases = new HashSet<Release>();
-            EpisodeMetadata = new HashSet<EpisodeMetadata>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static Episode CreateEpisodeUnsafe()
-        {
-            return new Episode();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="_season0"></param>
-        public Episode(Guid urlid, DateTime dateadded, Season _season0)
-        {
-            // 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.
-
-            this.UrlId = urlid;
-
-            if (_season0 == null)
-            {
-                throw new ArgumentNullException(nameof(_season0));
-            }
-
-            _season0.Episodes.Add(this);
-
-            this.Releases = new HashSet<Release>();
-            this.EpisodeMetadata = new HashSet<EpisodeMetadata>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="_season0"></param>
-        public static Episode Create(Guid urlid, DateTime dateadded, Season _season0)
-        {
-            return new Episode(urlid, dateadded, _season0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for EpisodeNumber.
-        /// </summary>
-        protected int? _EpisodeNumber;
-        /// <summary>
-        /// When provided in a partial class, allows value of EpisodeNumber to be changed before setting.
-        /// </summary>
-        partial void SetEpisodeNumber(int? oldValue, ref int? newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of EpisodeNumber to be changed before returning.
-        /// </summary>
-        partial void GetEpisodeNumber(ref int? result);
-
-        public int? EpisodeNumber
-        {
-            get
-            {
-                int? value = _EpisodeNumber;
-                GetEpisodeNumber(ref value);
-                return _EpisodeNumber = value;
-            }
-
-            set
-            {
-                int? oldValue = _EpisodeNumber;
-                SetEpisodeNumber(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _EpisodeNumber = value;
-                }
-            }
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-        [ForeignKey("Release_Releases_Id")]
-        public virtual ICollection<Release> Releases { get; protected set; }
-        [ForeignKey("EpisodeMetadata_EpisodeMetadata_Id")]
-        public virtual ICollection<EpisodeMetadata> EpisodeMetadata { get; protected set; }
-    }
-}
-

+ 0 - 198
Jellyfin.Data/Entities/EpisodeMetadata.cs

@@ -1,198 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.ComponentModel.DataAnnotations;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class EpisodeMetadata : Metadata
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected EpisodeMetadata()
-        {
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static EpisodeMetadata CreateEpisodeMetadataUnsafe()
-        {
-            return new EpisodeMetadata();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_episode0"></param>
-        public EpisodeMetadata(string title, string language, DateTime dateadded, DateTime datemodified, Episode _episode0)
-        {
-            if (string.IsNullOrEmpty(title))
-            {
-                throw new ArgumentNullException(nameof(title));
-            }
-
-            this.Title = title;
-
-            if (string.IsNullOrEmpty(language))
-            {
-                throw new ArgumentNullException(nameof(language));
-            }
-
-            this.Language = language;
-
-            if (_episode0 == null)
-            {
-                throw new ArgumentNullException(nameof(_episode0));
-            }
-
-            _episode0.EpisodeMetadata.Add(this);
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_episode0"></param>
-        public static EpisodeMetadata Create(string title, string language, DateTime dateadded, DateTime datemodified, Episode _episode0)
-        {
-            return new EpisodeMetadata(title, language, dateadded, datemodified, _episode0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Outline.
-        /// </summary>
-        protected string _Outline;
-        /// <summary>
-        /// When provided in a partial class, allows value of Outline to be changed before setting.
-        /// </summary>
-        partial void SetOutline(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Outline to be changed before returning.
-        /// </summary>
-        partial void GetOutline(ref string result);
-
-        /// <summary>
-        /// Max length = 1024
-        /// </summary>
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string Outline
-        {
-            get
-            {
-                string value = _Outline;
-                GetOutline(ref value);
-                return _Outline = value;
-            }
-
-            set
-            {
-                string oldValue = _Outline;
-                SetOutline(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Outline = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Plot.
-        /// </summary>
-        protected string _Plot;
-        /// <summary>
-        /// When provided in a partial class, allows value of Plot to be changed before setting.
-        /// </summary>
-        partial void SetPlot(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Plot to be changed before returning.
-        /// </summary>
-        partial void GetPlot(ref string result);
-
-        /// <summary>
-        /// Max length = 65535
-        /// </summary>
-        [MaxLength(65535)]
-        [StringLength(65535)]
-        public string Plot
-        {
-            get
-            {
-                string value = _Plot;
-                GetPlot(ref value);
-                return _Plot = value;
-            }
-
-            set
-            {
-                string oldValue = _Plot;
-                SetPlot(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Plot = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Tagline.
-        /// </summary>
-        protected string _Tagline;
-        /// <summary>
-        /// When provided in a partial class, allows value of Tagline to be changed before setting.
-        /// </summary>
-        partial void SetTagline(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Tagline to be changed before returning.
-        /// </summary>
-        partial void GetTagline(ref string result);
-
-        /// <summary>
-        /// Max length = 1024
-        /// </summary>
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string Tagline
-        {
-            get
-            {
-                string value = _Tagline;
-                GetTagline(ref value);
-                return _Tagline = value;
-            }
-
-            set
-            {
-                string oldValue = _Tagline;
-                SetTagline(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Tagline = value;
-                }
-            }
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-    }
-}
-

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

@@ -1,162 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class Genre
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected Genre()
-        {
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static Genre CreateGenreUnsafe()
-        {
-            return new Genre();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="name"></param>
-        /// <param name="_metadata0"></param>
-        public Genre(string name, Metadata _metadata0)
-        {
-            if (string.IsNullOrEmpty(name))
-            {
-                throw new ArgumentNullException(nameof(name));
-            }
-
-            this.Name = name;
-
-            if (_metadata0 == null)
-            {
-                throw new ArgumentNullException(nameof(_metadata0));
-            }
-
-            _metadata0.Genres.Add(this);
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="name"></param>
-        /// <param name="_metadata0"></param>
-        public static Genre Create(string name, Metadata _metadata0)
-        {
-            return new Genre(name, _metadata0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Name.
-        /// </summary>
-        internal string _Name;
-        /// <summary>
-        /// When provided in a partial class, allows value of Name to be changed before setting.
-        /// </summary>
-        partial void SetName(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Name to be changed before returning.
-        /// </summary>
-        partial void GetName(ref string result);
-
-        /// <summary>
-        /// Indexed, Required, Max length = 255
-        /// </summary>
-        [Required]
-        [MaxLength(255)]
-        [StringLength(255)]
-        public string Name
-        {
-            get
-            {
-                string value = _Name;
-                GetName(ref value);
-                return _Name = value;
-            }
-
-            set
-            {
-                string oldValue = _Name;
-                SetName(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Name = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-    }
-}
-

+ 2 - 1
Jellyfin.Data/Entities/Group.cs

@@ -6,13 +6,14 @@ using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
 using System.Linq;
 using Jellyfin.Data.Enums;
+using Jellyfin.Data.Interfaces;
 
 namespace Jellyfin.Data.Entities
 {
     /// <summary>
     /// An entity representing a group.
     /// </summary>
-    public partial class Group : IHasPermissions, ISavingChanges
+    public partial class Group : IHasPermissions, IHasConcurrencyToken
     {
         /// <summary>
         /// Initializes a new instance of the <see cref="Group"/> class.

+ 81 - 0
Jellyfin.Data/Entities/Libraries/Artwork.cs

@@ -0,0 +1,81 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Enums;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing artwork.
+    /// </summary>
+    public class Artwork : IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Artwork"/> class.
+        /// </summary>
+        /// <param name="path">The path.</param>
+        /// <param name="kind">The kind of art.</param>
+        /// <param name="owner">The owner.</param>
+        public Artwork(string path, ArtKind kind, IHasArtwork owner)
+        {
+            if (string.IsNullOrEmpty(path))
+            {
+                throw new ArgumentNullException(nameof(path));
+            }
+
+            Path = path;
+            Kind = kind;
+
+            owner?.Artwork.Add(this);
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Artwork"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected Artwork()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the id.
+        /// </summary>
+        /// <remarks>
+        /// Identity, Indexed, Required.
+        /// </remarks>
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public int Id { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the path.
+        /// </summary>
+        /// <remarks>
+        /// Required, Max length = 65535.
+        /// </remarks>
+        [Required]
+        [MaxLength(65535)]
+        [StringLength(65535)]
+        public string Path { get; set; }
+
+        /// <summary>
+        /// Gets or sets the kind of artwork.
+        /// </summary>
+        /// <remarks>
+        /// Required.
+        /// </remarks>
+        public ArtKind Kind { get; set; }
+
+        /// <inheritdoc />
+        [ConcurrencyCheck]
+        public uint RowVersion { get; set; }
+
+        /// <inheritdoc />
+        public void OnSavingChanges()
+        {
+            RowVersion++;
+        }
+    }
+}

+ 28 - 0
Jellyfin.Data/Entities/Libraries/Book.cs

@@ -0,0 +1,28 @@
+using System.Collections.Generic;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a book.
+    /// </summary>
+    public class Book : LibraryItem, IHasReleases
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Book"/> class.
+        /// </summary>
+        public Book()
+        {
+            BookMetadata = new HashSet<BookMetadata>();
+            Releases = new HashSet<Release>();
+        }
+
+        /// <summary>
+        /// Gets or sets a collection containing the metadata for this book.
+        /// </summary>
+        public virtual ICollection<BookMetadata> BookMetadata { get; protected set; }
+
+        /// <inheritdoc />
+        public virtual ICollection<Release> Releases { get; protected set; }
+    }
+}

+ 55 - 0
Jellyfin.Data/Entities/Libraries/BookMetadata.cs

@@ -0,0 +1,55 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity containing metadata for a book.
+    /// </summary>
+    public class BookMetadata : Metadata, IHasCompanies
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="BookMetadata"/> class.
+        /// </summary>
+        /// <param name="title">The title or name of the object.</param>
+        /// <param name="language">ISO-639-3 3-character language codes.</param>
+        /// <param name="book">The book.</param>
+        public BookMetadata(string title, string language, Book book) : base(title, language)
+        {
+            if (book == null)
+            {
+                throw new ArgumentNullException(nameof(book));
+            }
+
+            book.BookMetadata.Add(this);
+
+            Publishers = new HashSet<Company>();
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="BookMetadata"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected BookMetadata()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the ISBN.
+        /// </summary>
+        public long? Isbn { get; set; }
+
+        /// <summary>
+        /// Gets or sets a collection of the publishers for this book.
+        /// </summary>
+        public virtual ICollection<Company> Publishers { get; protected set; }
+
+        /// <inheritdoc />
+        [NotMapped]
+        public ICollection<Company> Companies => Publishers;
+    }
+}

+ 102 - 0
Jellyfin.Data/Entities/Libraries/Chapter.cs

@@ -0,0 +1,102 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a chapter.
+    /// </summary>
+    public class Chapter : IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Chapter"/> class.
+        /// </summary>
+        /// <param name="language">ISO-639-3 3-character language codes.</param>
+        /// <param name="startTime">The start time for this chapter.</param>
+        /// <param name="release">The release.</param>
+        public Chapter(string language, long startTime, Release release)
+        {
+            if (string.IsNullOrEmpty(language))
+            {
+                throw new ArgumentNullException(nameof(language));
+            }
+
+            Language = language;
+            StartTime = startTime;
+
+            if (release == null)
+            {
+                throw new ArgumentNullException(nameof(release));
+            }
+
+            release.Chapters.Add(this);
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Chapter"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected Chapter()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the id.
+        /// </summary>
+        /// <remarks>
+        /// Identity, Indexed, Required.
+        /// </remarks>
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public int Id { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the name.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 1024.
+        /// </remarks>
+        [MaxLength(1024)]
+        [StringLength(1024)]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// Gets or sets the language.
+        /// </summary>
+        /// <remarks>
+        /// Required, Min length = 3, Max length = 3
+        /// ISO-639-3 3-character language codes.
+        /// </remarks>
+        [Required]
+        [MinLength(3)]
+        [MaxLength(3)]
+        [StringLength(3)]
+        public string Language { get; set; }
+
+        /// <summary>
+        /// Gets or sets the start time.
+        /// </summary>
+        /// <remarks>
+        /// Required.
+        /// </remarks>
+        public long StartTime { get; set; }
+
+        /// <summary>
+        /// Gets or sets the end time.
+        /// </summary>
+        public long? EndTime { get; set; }
+
+        /// <inheritdoc />
+        [ConcurrencyCheck]
+        public uint RowVersion { get; protected set; }
+
+        /// <inheritdoc />
+        public void OnSavingChanges()
+        {
+            RowVersion++;
+        }
+    }
+}

+ 55 - 0
Jellyfin.Data/Entities/Libraries/Collection.cs

@@ -0,0 +1,55 @@
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a collection.
+    /// </summary>
+    public class Collection : IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Collection"/> class.
+        /// </summary>
+        public Collection()
+        {
+            Items = new HashSet<CollectionItem>();
+        }
+
+        /// <summary>
+        /// Gets or sets the id.
+        /// </summary>
+        /// <remarks>
+        /// Identity, Indexed, Required.
+        /// </remarks>
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public int Id { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the name.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 1024.
+        /// </remarks>
+        [MaxLength(1024)]
+        [StringLength(1024)]
+        public string Name { get; set; }
+
+        /// <inheritdoc />
+        [ConcurrencyCheck]
+        public uint RowVersion { get; set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing this collection's items.
+        /// </summary>
+        public virtual ICollection<CollectionItem> Items { get; protected set; }
+
+        /// <inheritdoc />
+        public void OnSavingChanges()
+        {
+            RowVersion++;
+        }
+    }
+}

+ 94 - 0
Jellyfin.Data/Entities/Libraries/CollectionItem.cs

@@ -0,0 +1,94 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a collection item.
+    /// </summary>
+    public class CollectionItem : IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="CollectionItem"/> class.
+        /// </summary>
+        /// <param name="collection">The collection.</param>
+        /// <param name="previous">The previous item.</param>
+        /// <param name="next">The next item.</param>
+        public CollectionItem(Collection collection, CollectionItem previous, CollectionItem next)
+        {
+            if (collection == null)
+            {
+                throw new ArgumentNullException(nameof(collection));
+            }
+
+            collection.Items.Add(this);
+
+            if (next != null)
+            {
+                Next = next;
+                next.Previous = this;
+            }
+
+            if (previous != null)
+            {
+                Previous = previous;
+                previous.Next = this;
+            }
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="CollectionItem"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected CollectionItem()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the id.
+        /// </summary>
+        /// <remarks>
+        /// Identity, Indexed, Required.
+        /// </remarks>
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public int Id { get; set; }
+
+        /// <inheritdoc />
+        [ConcurrencyCheck]
+        public uint RowVersion { get; set; }
+
+        /// <summary>
+        /// Gets or sets the library item.
+        /// </summary>
+        /// <remarks>
+        /// Required.
+        /// </remarks>
+        public virtual LibraryItem LibraryItem { get; set; }
+
+        /// <summary>
+        /// Gets or sets the next item in the collection.
+        /// </summary>
+        /// <remarks>
+        /// TODO check if this properly updated dependant and has the proper principal relationship
+        /// </remarks>
+        public virtual CollectionItem Next { get; set; }
+
+        /// <summary>
+        /// Gets or sets the previous item in the collection.
+        /// </summary>
+        /// <remarks>
+        /// TODO check if this properly updated dependant and has the proper principal relationship
+        /// </remarks>
+        public virtual CollectionItem Previous { get; set; }
+
+        /// <inheritdoc />
+        public void OnSavingChanges()
+        {
+            RowVersion++;
+        }
+    }
+}

+ 67 - 0
Jellyfin.Data/Entities/Libraries/Company.cs

@@ -0,0 +1,67 @@
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a company.
+    /// </summary>
+    public class Company : IHasCompanies, IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Company"/> class.
+        /// </summary>
+        /// <param name="owner">The owner of this company.</param>
+        public Company(IHasCompanies owner)
+        {
+            owner?.Companies.Add(this);
+
+            CompanyMetadata = new HashSet<CompanyMetadata>();
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Company"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected Company()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the id.
+        /// </summary>
+        /// <remarks>
+        /// Identity, Indexed, Required.
+        /// </remarks>
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public int Id { get; protected set; }
+
+        /// <inheritdoc />
+        [ConcurrencyCheck]
+        public uint RowVersion { get; set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing the metadata.
+        /// </summary>
+        public virtual ICollection<CompanyMetadata> CompanyMetadata { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing this company's child companies.
+        /// </summary>
+        public virtual ICollection<Company> ChildCompanies { get; protected set; }
+
+        /// <inheritdoc />
+        [NotMapped]
+        public ICollection<Company> Companies => ChildCompanies;
+
+        /// <inheritdoc />
+        public void OnSavingChanges()
+        {
+            RowVersion++;
+        }
+    }
+}

+ 74 - 0
Jellyfin.Data/Entities/Libraries/CompanyMetadata.cs

@@ -0,0 +1,74 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity holding metadata for a <see cref="Company"/>.
+    /// </summary>
+    public class CompanyMetadata : Metadata
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="CompanyMetadata"/> class.
+        /// </summary>
+        /// <param name="title">The title or name of the object.</param>
+        /// <param name="language">ISO-639-3 3-character language codes.</param>
+        /// <param name="company">The company.</param>
+        public CompanyMetadata(string title, string language, Company company) : base(title, language)
+        {
+            if (company == null)
+            {
+                throw new ArgumentNullException(nameof(company));
+            }
+
+            company.CompanyMetadata.Add(this);
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="CompanyMetadata"/> class.
+        /// </summary>
+        protected CompanyMetadata()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the description.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 65535.
+        /// </remarks>
+        [MaxLength(65535)]
+        [StringLength(65535)]
+        public string Description { get; set; }
+
+        /// <summary>
+        /// Gets or sets the headquarters.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 255.
+        /// </remarks>
+        [MaxLength(255)]
+        [StringLength(255)]
+        public string Headquarters { get; set; }
+
+        /// <summary>
+        /// Gets or sets the country code.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 2.
+        /// </remarks>
+        [MaxLength(2)]
+        [StringLength(2)]
+        public string Country { get; set; }
+
+        /// <summary>
+        /// Gets or sets the homepage.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 1024.
+        /// </remarks>
+        [MaxLength(1024)]
+        [StringLength(1024)]
+        public string Homepage { get; set; }
+    }
+}

+ 28 - 0
Jellyfin.Data/Entities/Libraries/CustomItem.cs

@@ -0,0 +1,28 @@
+using System.Collections.Generic;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a custom item.
+    /// </summary>
+    public class CustomItem : LibraryItem, IHasReleases
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="CustomItem"/> class.
+        /// </summary>
+        public CustomItem()
+        {
+            CustomItemMetadata = new HashSet<CustomItemMetadata>();
+            Releases = new HashSet<Release>();
+        }
+
+        /// <summary>
+        /// Gets or sets a collection containing the metadata for this item.
+        /// </summary>
+        public virtual ICollection<CustomItemMetadata> CustomItemMetadata { get; protected set; }
+
+        /// <inheritdoc />
+        public virtual ICollection<Release> Releases { get; protected set; }
+    }
+}

+ 36 - 0
Jellyfin.Data/Entities/Libraries/CustomItemMetadata.cs

@@ -0,0 +1,36 @@
+using System;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity containing metadata for a custom item.
+    /// </summary>
+    public class CustomItemMetadata : Metadata
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="CustomItemMetadata"/> class.
+        /// </summary>
+        /// <param name="title">The title or name of the object.</param>
+        /// <param name="language">ISO-639-3 3-character language codes.</param>
+        /// <param name="item">The item.</param>
+        public CustomItemMetadata(string title, string language, CustomItem item) : base(title, language)
+        {
+            if (item == null)
+            {
+                throw new ArgumentNullException(nameof(item));
+            }
+
+            item.CustomItemMetadata.Add(this);
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="CustomItemMetadata"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected CustomItemMetadata()
+        {
+        }
+    }
+}

+ 52 - 0
Jellyfin.Data/Entities/Libraries/Episode.cs

@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing an episode.
+    /// </summary>
+    public class Episode : LibraryItem, IHasReleases
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Episode"/> class.
+        /// </summary>
+        /// <param name="season">The season.</param>
+        public Episode(Season season)
+        {
+            if (season == null)
+            {
+                throw new ArgumentNullException(nameof(season));
+            }
+
+            season.Episodes.Add(this);
+
+            Releases = new HashSet<Release>();
+            EpisodeMetadata = new HashSet<EpisodeMetadata>();
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Episode"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected Episode()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the episode number.
+        /// </summary>
+        public int? EpisodeNumber { get; set; }
+
+        /// <inheritdoc />
+        public virtual ICollection<Release> Releases { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing the metadata for this episode.
+        /// </summary>
+        public virtual ICollection<EpisodeMetadata> EpisodeMetadata { get; protected set; }
+    }
+}

+ 67 - 0
Jellyfin.Data/Entities/Libraries/EpisodeMetadata.cs

@@ -0,0 +1,67 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity containing metadata for an <see cref="Episode"/>.
+    /// </summary>
+    public class EpisodeMetadata : Metadata
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="EpisodeMetadata"/> class.
+        /// </summary>
+        /// <param name="title">The title or name of the object.</param>
+        /// <param name="language">ISO-639-3 3-character language codes.</param>
+        /// <param name="episode">The episode.</param>
+        public EpisodeMetadata(string title, string language, Episode episode) : base(title, language)
+        {
+            if (episode == null)
+            {
+                throw new ArgumentNullException(nameof(episode));
+            }
+
+            episode.EpisodeMetadata.Add(this);
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="EpisodeMetadata"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected EpisodeMetadata()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the outline.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 1024.
+        /// </remarks>
+        [MaxLength(1024)]
+        [StringLength(1024)]
+        public string Outline { get; set; }
+
+        /// <summary>
+        /// Gets or sets the plot.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 65535.
+        /// </remarks>
+        [MaxLength(65535)]
+        [StringLength(65535)]
+        public string Plot { get; set; }
+
+        /// <summary>
+        /// Gets or sets the tagline.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 1024.
+        /// </remarks>
+        [MaxLength(1024)]
+        [StringLength(1024)]
+        public string Tagline { get; set; }
+    }
+}

+ 75 - 0
Jellyfin.Data/Entities/Libraries/Genre.cs

@@ -0,0 +1,75 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a genre.
+    /// </summary>
+    public class Genre : IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Genre"/> class.
+        /// </summary>
+        /// <param name="name">The name.</param>
+        /// <param name="metadata">The metadata.</param>
+        public Genre(string name, Metadata metadata)
+        {
+            if (string.IsNullOrEmpty(name))
+            {
+                throw new ArgumentNullException(nameof(name));
+            }
+
+            Name = name;
+
+            if (metadata == null)
+            {
+                throw new ArgumentNullException(nameof(metadata));
+            }
+
+            metadata.Genres.Add(this);
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Genre"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected Genre()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the id.
+        /// </summary>
+        /// <remarks>
+        /// Identity, Indexed, Required.
+        /// </remarks>
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public int Id { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the name.
+        /// </summary>
+        /// <remarks>
+        /// Indexed, Required, Max length = 255.
+        /// </remarks>
+        [Required]
+        [MaxLength(255)]
+        [StringLength(255)]
+        public string Name { get; set; }
+
+        /// <inheritdoc />
+        [ConcurrencyCheck]
+        public uint RowVersion { get; protected set; }
+
+        /// <inheritdoc />
+        public void OnSavingChanges()
+        {
+            RowVersion++;
+        }
+    }
+}

+ 76 - 0
Jellyfin.Data/Entities/Libraries/Library.cs

@@ -0,0 +1,76 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a library.
+    /// </summary>
+    public class Library : IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Library"/> class.
+        /// </summary>
+        /// <param name="name">The name of the library.</param>
+        public Library(string name)
+        {
+            if (string.IsNullOrWhiteSpace(name))
+            {
+                throw new ArgumentNullException(nameof(name));
+            }
+
+            Name = name;
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Library"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected Library()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the id.
+        /// </summary>
+        /// <remarks>
+        /// Identity, Indexed, Required.
+        /// </remarks>
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public int Id { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the name.
+        /// </summary>
+        /// <remarks>
+        /// Required, Max length = 128.
+        /// </remarks>
+        [Required]
+        [MaxLength(128)]
+        [StringLength(128)]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// Gets or sets the root path of the library.
+        /// </summary>
+        /// <remarks>
+        /// Required.
+        /// </remarks>
+        [Required]
+        public string Path { get; set; }
+
+        /// <inheritdoc />
+        [ConcurrencyCheck]
+        public uint RowVersion { get; set; }
+
+        /// <inheritdoc />
+        public void OnSavingChanges()
+        {
+            RowVersion++;
+        }
+    }
+}

+ 63 - 0
Jellyfin.Data/Entities/Libraries/LibraryItem.cs

@@ -0,0 +1,63 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a library item.
+    /// </summary>
+    public abstract class LibraryItem : IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="LibraryItem"/> class.
+        /// </summary>
+        /// <param name="library">The library of this item.</param>
+        protected LibraryItem(Library library)
+        {
+            DateAdded = DateTime.UtcNow;
+            Library = library;
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="LibraryItem"/> class.
+        /// </summary>
+        protected LibraryItem()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the id.
+        /// </summary>
+        /// <remarks>
+        /// Identity, Indexed, Required.
+        /// </remarks>
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public int Id { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the date this library item was added.
+        /// </summary>
+        public DateTime DateAdded { get; protected set; }
+
+        /// <inheritdoc />
+        [ConcurrencyCheck]
+        public uint RowVersion { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the library of this item.
+        /// </summary>
+        /// <remarks>
+        /// Required.
+        /// </remarks>
+        [Required]
+        public virtual Library Library { get; set; }
+
+        /// <inheritdoc />
+        public void OnSavingChanges()
+        {
+            RowVersion++;
+        }
+    }
+}

+ 94 - 0
Jellyfin.Data/Entities/Libraries/MediaFile.cs

@@ -0,0 +1,94 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Enums;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a file on disk.
+    /// </summary>
+    public class MediaFile : IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="MediaFile"/> class.
+        /// </summary>
+        /// <param name="path">The path relative to the LibraryRoot.</param>
+        /// <param name="kind">The file kind.</param>
+        /// <param name="release">The release.</param>
+        public MediaFile(string path, MediaFileKind kind, Release release)
+        {
+            if (string.IsNullOrEmpty(path))
+            {
+                throw new ArgumentNullException(nameof(path));
+            }
+
+            Path = path;
+            Kind = kind;
+
+            if (release == null)
+            {
+                throw new ArgumentNullException(nameof(release));
+            }
+
+            release.MediaFiles.Add(this);
+
+            MediaFileStreams = new HashSet<MediaFileStream>();
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="MediaFile"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected MediaFile()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the id.
+        /// </summary>
+        /// <remarks>
+        /// Identity, Indexed, Required.
+        /// </remarks>
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public int Id { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the path relative to the library root.
+        /// </summary>
+        /// <remarks>
+        /// Required, Max length = 65535.
+        /// </remarks>
+        [Required]
+        [MaxLength(65535)]
+        [StringLength(65535)]
+        public string Path { get; set; }
+
+        /// <summary>
+        /// Gets or sets the kind of media file.
+        /// </summary>
+        /// <remarks>
+        /// Required.
+        /// </remarks>
+        public MediaFileKind Kind { get; set; }
+
+        /// <inheritdoc />
+        [ConcurrencyCheck]
+        public uint RowVersion { get; set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing the streams in this file.
+        /// </summary>
+        public virtual ICollection<MediaFileStream> MediaFileStreams { get; protected set; }
+
+        /// <inheritdoc />
+        public void OnSavingChanges()
+        {
+            RowVersion++;
+        }
+    }
+}

+ 67 - 0
Jellyfin.Data/Entities/Libraries/MediaFileStream.cs

@@ -0,0 +1,67 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a stream in a media file.
+    /// </summary>
+    public class MediaFileStream : IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="MediaFileStream"/> class.
+        /// </summary>
+        /// <param name="streamNumber">The number of this stream.</param>
+        /// <param name="mediaFile">The media file.</param>
+        public MediaFileStream(int streamNumber, MediaFile mediaFile)
+        {
+            StreamNumber = streamNumber;
+
+            if (mediaFile == null)
+            {
+                throw new ArgumentNullException(nameof(mediaFile));
+            }
+
+            mediaFile.MediaFileStreams.Add(this);
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="MediaFileStream"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected MediaFileStream()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the id.
+        /// </summary>
+        /// <remarks>
+        /// Identity, Indexed, Required.
+        /// </remarks>
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public int Id { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the stream number.
+        /// </summary>
+        /// <remarks>
+        /// Required.
+        /// </remarks>
+        public int StreamNumber { get; set; }
+
+        /// <inheritdoc />
+        [ConcurrencyCheck]
+        public uint RowVersion { get; set; }
+
+        /// <inheritdoc />
+        public void OnSavingChanges()
+        {
+            RowVersion++;
+        }
+    }
+}

+ 165 - 0
Jellyfin.Data/Entities/Libraries/Metadata.cs

@@ -0,0 +1,165 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An abstract class that holds metadata.
+    /// </summary>
+    public abstract class Metadata : IHasArtwork, IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Metadata"/> class.
+        /// </summary>
+        /// <param name="title">The title or name of the object.</param>
+        /// <param name="language">ISO-639-3 3-character language codes.</param>
+        protected Metadata(string title, string language)
+        {
+            if (string.IsNullOrEmpty(title))
+            {
+                throw new ArgumentNullException(nameof(title));
+            }
+
+            if (string.IsNullOrEmpty(language))
+            {
+                throw new ArgumentNullException(nameof(language));
+            }
+
+            Title = title;
+            Language = language;
+            DateAdded = DateTime.UtcNow;
+            DateModified = DateAdded;
+
+            PersonRoles = new HashSet<PersonRole>();
+            Genres = new HashSet<Genre>();
+            Artwork = new HashSet<Artwork>();
+            Ratings = new HashSet<Rating>();
+            Sources = new HashSet<MetadataProviderId>();
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Metadata"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to being abstract.
+        /// </remarks>
+        protected Metadata()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the id.
+        /// </summary>
+        /// <remarks>
+        /// Identity, Indexed, Required.
+        /// </remarks>
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public int Id { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the title.
+        /// </summary>
+        /// <remarks>
+        /// Required, Max length = 1024.
+        /// </remarks>
+        [Required]
+        [MaxLength(1024)]
+        [StringLength(1024)]
+        public string Title { get; set; }
+
+        /// <summary>
+        /// Gets or sets the original title.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 1024.
+        /// </remarks>
+        [MaxLength(1024)]
+        [StringLength(1024)]
+        public string OriginalTitle { get; set; }
+
+        /// <summary>
+        /// Gets or sets the sort title.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 1024.
+        /// </remarks>
+        [MaxLength(1024)]
+        [StringLength(1024)]
+        public string SortTitle { get; set; }
+
+        /// <summary>
+        /// Gets or sets the language.
+        /// </summary>
+        /// <remarks>
+        /// Required, Min length = 3, Max length = 3.
+        /// ISO-639-3 3-character language codes.
+        /// </remarks>
+        [Required]
+        [MinLength(3)]
+        [MaxLength(3)]
+        [StringLength(3)]
+        public string Language { get; set; }
+
+        /// <summary>
+        /// Gets or sets the release date.
+        /// </summary>
+        public DateTimeOffset? ReleaseDate { get; set; }
+
+        /// <summary>
+        /// Gets or sets the date added.
+        /// </summary>
+        /// <remarks>
+        /// Required.
+        /// </remarks>
+        public DateTime DateAdded { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the date modified.
+        /// </summary>
+        /// <remarks>
+        /// Required.
+        /// </remarks>
+        public DateTime DateModified { get; set; }
+
+        /// <summary>
+        /// Gets or sets the row version.
+        /// </summary>
+        /// <remarks>
+        /// Required, ConcurrencyToken.
+        /// </remarks>
+        [ConcurrencyCheck]
+        public uint RowVersion { get; set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing the person roles for this item.
+        /// </summary>
+        public virtual ICollection<PersonRole> PersonRoles { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing the generes for this item.
+        /// </summary>
+        public virtual ICollection<Genre> Genres { get; protected set; }
+
+        /// <inheritdoc />
+        public virtual ICollection<Artwork> Artwork { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing the ratings for this item.
+        /// </summary>
+        public virtual ICollection<Rating> Ratings { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing the metadata sources for this item.
+        /// </summary>
+        public virtual ICollection<MetadataProviderId> Sources { get; protected set; }
+
+        /// <inheritdoc />
+        public void OnSavingChanges()
+        {
+            RowVersion++;
+        }
+    }
+}

+ 67 - 0
Jellyfin.Data/Entities/Libraries/MetadataProvider.cs

@@ -0,0 +1,67 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a metadata provider.
+    /// </summary>
+    public class MetadataProvider : IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="MetadataProvider"/> class.
+        /// </summary>
+        /// <param name="name">The name of the metadata provider.</param>
+        public MetadataProvider(string name)
+        {
+            if (string.IsNullOrEmpty(name))
+            {
+                throw new ArgumentNullException(nameof(name));
+            }
+
+            Name = name;
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="MetadataProvider"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected MetadataProvider()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the id.
+        /// </summary>
+        /// <remarks>
+        /// Identity, Indexed, Required.
+        /// </remarks>
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public int Id { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the name.
+        /// </summary>
+        /// <remarks>
+        /// Required, Max length = 1024.
+        /// </remarks>
+        [Required]
+        [MaxLength(1024)]
+        [StringLength(1024)]
+        public string Name { get; set; }
+
+        /// <inheritdoc />
+        [ConcurrencyCheck]
+        public uint RowVersion { get; set; }
+
+        /// <inheritdoc />
+        public void OnSavingChanges()
+        {
+            RowVersion++;
+        }
+    }
+}

+ 83 - 0
Jellyfin.Data/Entities/Libraries/MetadataProviderId.cs

@@ -0,0 +1,83 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a unique identifier for a metadata provider.
+    /// </summary>
+    public class MetadataProviderId : IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="MetadataProviderId"/> class.
+        /// </summary>
+        /// <param name="providerId">The provider id.</param>
+        /// <param name="metadata">The metadata entity.</param>
+        public MetadataProviderId(string providerId, Metadata metadata)
+        {
+            if (string.IsNullOrEmpty(providerId))
+            {
+                throw new ArgumentNullException(nameof(providerId));
+            }
+
+            ProviderId = providerId;
+
+            if (metadata == null)
+            {
+                throw new ArgumentNullException(nameof(metadata));
+            }
+
+            metadata.Sources.Add(this);
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="MetadataProviderId"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected MetadataProviderId()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the id.
+        /// </summary>
+        /// <remarks>
+        /// Identity, Indexed, Required.
+        /// </remarks>
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public int Id { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the provider id.
+        /// </summary>
+        /// <remarks>
+        /// Required, Max length = 255.
+        /// </remarks>
+        [Required]
+        [MaxLength(255)]
+        [StringLength(255)]
+        public string ProviderId { get; set; }
+
+        /// <inheritdoc />
+        [ConcurrencyCheck]
+        public uint RowVersion { get; set; }
+
+        /// <summary>
+        /// Gets or sets the metadata provider.
+        /// </summary>
+        /// <remarks>
+        /// Required.
+        /// </remarks>
+        public virtual MetadataProvider MetadataProvider { get; set; }
+
+        /// <inheritdoc />
+        public void OnSavingChanges()
+        {
+            RowVersion++;
+        }
+    }
+}

+ 28 - 0
Jellyfin.Data/Entities/Libraries/Movie.cs

@@ -0,0 +1,28 @@
+using System.Collections.Generic;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a movie.
+    /// </summary>
+    public class Movie : LibraryItem, IHasReleases
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Movie"/> class.
+        /// </summary>
+        public Movie()
+        {
+            Releases = new HashSet<Release>();
+            MovieMetadata = new HashSet<MovieMetadata>();
+        }
+
+        /// <inheritdoc />
+        public virtual ICollection<Release> Releases { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing the metadata for this movie.
+        /// </summary>
+        public virtual ICollection<MovieMetadata> MovieMetadata { get; protected set; }
+    }
+}

+ 85 - 0
Jellyfin.Data/Entities/Libraries/MovieMetadata.cs

@@ -0,0 +1,85 @@
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity holding the metadata for a movie.
+    /// </summary>
+    public class MovieMetadata : Metadata, IHasCompanies
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="MovieMetadata"/> class.
+        /// </summary>
+        /// <param name="title">The title or name of the movie.</param>
+        /// <param name="language">ISO-639-3 3-character language codes.</param>
+        /// <param name="movie">The movie.</param>
+        public MovieMetadata(string title, string language, Movie movie) : base(title, language)
+        {
+            Studios = new HashSet<Company>();
+
+            movie.MovieMetadata.Add(this);
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="MovieMetadata"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected MovieMetadata()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the outline.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 1024.
+        /// </remarks>
+        [MaxLength(1024)]
+        [StringLength(1024)]
+        public string Outline { get; set; }
+
+        /// <summary>
+        /// Gets or sets the tagline.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 1024.
+        /// </remarks>
+        [MaxLength(1024)]
+        [StringLength(1024)]
+        public string Tagline { get; set; }
+
+        /// <summary>
+        /// Gets or sets the plot.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 65535.
+        /// </remarks>
+        [MaxLength(65535)]
+        [StringLength(65535)]
+        public string Plot { get; set; }
+
+        /// <summary>
+        /// Gets or sets the country code.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 2.
+        /// </remarks>
+        [MaxLength(2)]
+        [StringLength(2)]
+        public string Country { get; set; }
+
+        /// <summary>
+        /// Gets or sets the studios that produced this movie.
+        /// </summary>
+        public virtual ICollection<Company> Studios { get; protected set; }
+
+        /// <inheritdoc />
+        [NotMapped]
+        public ICollection<Company> Companies => Studios;
+    }
+}

+ 29 - 0
Jellyfin.Data/Entities/Libraries/MusicAlbum.cs

@@ -0,0 +1,29 @@
+using System.Collections.Generic;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a music album.
+    /// </summary>
+    public class MusicAlbum : LibraryItem
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="MusicAlbum"/> class.
+        /// </summary>
+        public MusicAlbum()
+        {
+            MusicAlbumMetadata = new HashSet<MusicAlbumMetadata>();
+            Tracks = new HashSet<Track>();
+        }
+
+        /// <summary>
+        /// Gets or sets a collection containing the album metadata.
+        /// </summary>
+        public virtual ICollection<MusicAlbumMetadata> MusicAlbumMetadata { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing the tracks.
+        /// </summary>
+        public virtual ICollection<Track> Tracks { get; protected set; }
+    }
+}

+ 69 - 0
Jellyfin.Data/Entities/Libraries/MusicAlbumMetadata.cs

@@ -0,0 +1,69 @@
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity holding the metadata for a music album.
+    /// </summary>
+    public class MusicAlbumMetadata : Metadata
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="MusicAlbumMetadata"/> class.
+        /// </summary>
+        /// <param name="title">The title or name of the album.</param>
+        /// <param name="language">ISO-639-3 3-character language codes.</param>
+        /// <param name="album">The music album.</param>
+        public MusicAlbumMetadata(string title, string language, MusicAlbum album) : base(title, language)
+        {
+            Labels = new HashSet<Company>();
+
+            album.MusicAlbumMetadata.Add(this);
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="MusicAlbumMetadata"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected MusicAlbumMetadata()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the barcode.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 255.
+        /// </remarks>
+        [MaxLength(255)]
+        [StringLength(255)]
+        public string Barcode { get; set; }
+
+        /// <summary>
+        /// Gets or sets the label number.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 255.
+        /// </remarks>
+        [MaxLength(255)]
+        [StringLength(255)]
+        public string LabelNumber { get; set; }
+
+        /// <summary>
+        /// Gets or sets the country code.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 2.
+        /// </remarks>
+        [MaxLength(2)]
+        [StringLength(2)]
+        public string Country { get; set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing the labels.
+        /// </summary>
+        public virtual ICollection<Company> Labels { get; protected set; }
+    }
+}

+ 103 - 0
Jellyfin.Data/Entities/Libraries/Person.cs

@@ -0,0 +1,103 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a person.
+    /// </summary>
+    public class Person : IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Person"/> class.
+        /// </summary>
+        /// <param name="name">The name of the person.</param>
+        public Person(string name)
+        {
+            if (string.IsNullOrEmpty(name))
+            {
+                throw new ArgumentNullException(nameof(name));
+            }
+
+            Name = name;
+            DateAdded = DateTime.UtcNow;
+            DateModified = DateAdded;
+
+            Sources = new HashSet<MetadataProviderId>();
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Person"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected Person()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the id.
+        /// </summary>
+        /// <remarks>
+        /// Identity, Indexed, Required.
+        /// </remarks>
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public int Id { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the name.
+        /// </summary>
+        /// <remarks>
+        /// Required, Max length = 1024.
+        /// </remarks>
+        [Required]
+        [MaxLength(1024)]
+        [StringLength(1024)]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// Gets or sets the source id.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 255.
+        /// </remarks>
+        [MaxLength(256)]
+        [StringLength(256)]
+        public string SourceId { get; set; }
+
+        /// <summary>
+        /// Gets or sets the date added.
+        /// </summary>
+        /// <remarks>
+        /// Required.
+        /// </remarks>
+        public DateTime DateAdded { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the date modified.
+        /// </summary>
+        /// <remarks>
+        /// Required.
+        /// </remarks>
+        public DateTime DateModified { get; set; }
+
+        /// <inheritdoc />
+        [ConcurrencyCheck]
+        public uint RowVersion { get; set; }
+
+        /// <summary>
+        /// Gets or sets a list of metadata sources for this person.
+        /// </summary>
+        public virtual ICollection<MetadataProviderId> Sources { get; protected set; }
+
+        /// <inheritdoc />
+        public void OnSavingChanges()
+        {
+            RowVersion++;
+        }
+    }
+}

+ 98 - 0
Jellyfin.Data/Entities/Libraries/PersonRole.cs

@@ -0,0 +1,98 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Enums;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a person's role in media.
+    /// </summary>
+    public class PersonRole : IHasArtwork, IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="PersonRole"/> class.
+        /// </summary>
+        /// <param name="type">The role type.</param>
+        /// <param name="metadata">The metadata.</param>
+        public PersonRole(PersonRoleType type, Metadata metadata)
+        {
+            Type = type;
+
+            if (metadata == null)
+            {
+                throw new ArgumentNullException(nameof(metadata));
+            }
+
+            metadata.PersonRoles.Add(this);
+
+            Sources = new HashSet<MetadataProviderId>();
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="PersonRole"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected PersonRole()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the id.
+        /// </summary>
+        /// <remarks>
+        /// Identity, Indexed, Required.
+        /// </remarks>
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public int Id { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the name of the person's role.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 1024.
+        /// </remarks>
+        [MaxLength(1024)]
+        [StringLength(1024)]
+        public string Role { get; set; }
+
+        /// <summary>
+        /// Gets or sets the person's role type.
+        /// </summary>
+        /// <remarks>
+        /// Required.
+        /// </remarks>
+        public PersonRoleType Type { get; set; }
+
+        /// <inheritdoc />
+        [ConcurrencyCheck]
+        public uint RowVersion { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the person.
+        /// </summary>
+        /// <remarks>
+        /// Required.
+        /// </remarks>
+        [Required]
+        public virtual Person Person { get; set; }
+
+        /// <inheritdoc />
+        public virtual ICollection<Artwork> Artwork { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing the metadata sources for this person role.
+        /// </summary>
+        public virtual ICollection<MetadataProviderId> Sources { get; protected set; }
+
+        /// <inheritdoc />
+        public void OnSavingChanges()
+        {
+            RowVersion++;
+        }
+    }
+}

+ 28 - 0
Jellyfin.Data/Entities/Libraries/Photo.cs

@@ -0,0 +1,28 @@
+using System.Collections.Generic;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a photo.
+    /// </summary>
+    public class Photo : LibraryItem, IHasReleases
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Photo"/> class.
+        /// </summary>
+        public Photo()
+        {
+            PhotoMetadata = new HashSet<PhotoMetadata>();
+            Releases = new HashSet<Release>();
+        }
+
+        /// <summary>
+        /// Gets or sets a collection containing the photo metadata.
+        /// </summary>
+        public virtual ICollection<PhotoMetadata> PhotoMetadata { get; protected set; }
+
+        /// <inheritdoc />
+        public virtual ICollection<Release> Releases { get; protected set; }
+    }
+}

+ 36 - 0
Jellyfin.Data/Entities/Libraries/PhotoMetadata.cs

@@ -0,0 +1,36 @@
+using System;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity that holds metadata for a photo.
+    /// </summary>
+    public class PhotoMetadata : Metadata
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="PhotoMetadata"/> class.
+        /// </summary>
+        /// <param name="title">The title or name of the photo.</param>
+        /// <param name="language">ISO-639-3 3-character language codes.</param>
+        /// <param name="photo">The photo.</param>
+        public PhotoMetadata(string title, string language, Photo photo) : base(title, language)
+        {
+            if (photo == null)
+            {
+                throw new ArgumentNullException(nameof(photo));
+            }
+
+            photo.PhotoMetadata.Add(this);
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="PhotoMetadata"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected PhotoMetadata()
+        {
+        }
+    }
+}

+ 78 - 0
Jellyfin.Data/Entities/Libraries/Rating.cs

@@ -0,0 +1,78 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a rating for an entity.
+    /// </summary>
+    public class Rating : IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Rating"/> class.
+        /// </summary>
+        /// <param name="value">The value.</param>
+        /// <param name="metadata">The metadata.</param>
+        public Rating(double value, Metadata metadata)
+        {
+            Value = value;
+
+            if (metadata == null)
+            {
+                throw new ArgumentNullException(nameof(metadata));
+            }
+
+            metadata.Ratings.Add(this);
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Rating"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected Rating()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the id.
+        /// </summary>
+        /// <remarks>
+        /// Identity, Indexed, Required.
+        /// </remarks>
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public int Id { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the value.
+        /// </summary>
+        /// <remarks>
+        /// Required.
+        /// </remarks>
+        public double Value { get; set; }
+
+        /// <summary>
+        /// Gets or sets the number of votes.
+        /// </summary>
+        public int? Votes { get; set; }
+
+        /// <inheritdoc />
+        [ConcurrencyCheck]
+        public uint RowVersion { get; set; }
+
+        /// <summary>
+        /// Gets or sets the rating type.
+        /// If this is <c>null</c> it's the internal user rating.
+        /// </summary>
+        public virtual RatingSource RatingType { get; set; }
+
+        /// <inheritdoc />
+        public void OnSavingChanges()
+        {
+            RowVersion++;
+        }
+    }
+}

+ 92 - 0
Jellyfin.Data/Entities/Libraries/RatingSource.cs

@@ -0,0 +1,92 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// This is the entity to store review ratings, not age ratings.
+    /// </summary>
+    public class RatingSource : IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="RatingSource"/> class.
+        /// </summary>
+        /// <param name="minimumValue">The minimum value.</param>
+        /// <param name="maximumValue">The maximum value.</param>
+        /// <param name="rating">The rating.</param>
+        public RatingSource(double minimumValue, double maximumValue, Rating rating)
+        {
+            MinimumValue = minimumValue;
+            MaximumValue = maximumValue;
+
+            if (rating == null)
+            {
+                throw new ArgumentNullException(nameof(rating));
+            }
+
+            rating.RatingType = this;
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="RatingSource"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected RatingSource()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the id.
+        /// </summary>
+        /// <remarks>
+        /// Identity, Indexed, Required.
+        /// </remarks>
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public int Id { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the name.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 1024.
+        /// </remarks>
+        [MaxLength(1024)]
+        [StringLength(1024)]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// Gets or sets the minimum value.
+        /// </summary>
+        /// <remarks>
+        /// Required.
+        /// </remarks>
+        public double MinimumValue { get; set; }
+
+        /// <summary>
+        /// Gets or sets the maximum value.
+        /// </summary>
+        /// <remarks>
+        /// Required.
+        /// </remarks>
+        public double MaximumValue { get; set; }
+
+        /// <inheritdoc />
+        [ConcurrencyCheck]
+        public uint RowVersion { get; set; }
+
+        /// <summary>
+        /// Gets or sets the metadata source.
+        /// </summary>
+        public virtual MetadataProviderId Source { get; set; }
+
+        /// <inheritdoc />
+        public void OnSavingChanges()
+        {
+            RowVersion++;
+        }
+    }
+}

+ 84 - 0
Jellyfin.Data/Entities/Libraries/Release.cs

@@ -0,0 +1,84 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a release for a library item, eg. Director's cut vs. standard.
+    /// </summary>
+    public class Release : IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Release"/> class.
+        /// </summary>
+        /// <param name="name">The name of this release.</param>
+        /// <param name="owner">The owner of this release.</param>
+        public Release(string name, IHasReleases owner)
+        {
+            if (string.IsNullOrEmpty(name))
+            {
+                throw new ArgumentNullException(nameof(name));
+            }
+
+            Name = name;
+
+            owner?.Releases.Add(this);
+
+            MediaFiles = new HashSet<MediaFile>();
+            Chapters = new HashSet<Chapter>();
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Release"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected Release()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the id.
+        /// </summary>
+        /// <remarks>
+        /// Identity, Indexed, Required.
+        /// </remarks>
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public int Id { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets the name.
+        /// </summary>
+        /// <remarks>
+        /// Required, Max length = 1024.
+        /// </remarks>
+        [Required]
+        [MaxLength(1024)]
+        [StringLength(1024)]
+        public string Name { get; set; }
+
+        /// <inheritdoc />
+        [ConcurrencyCheck]
+        public uint RowVersion { get; set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing the media files for this release.
+        /// </summary>
+        public virtual ICollection<MediaFile> MediaFiles { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing the chapters for this release.
+        /// </summary>
+        public virtual ICollection<Chapter> Chapters { get; protected set; }
+
+        /// <inheritdoc />
+        public void OnSavingChanges()
+        {
+            RowVersion++;
+        }
+    }
+}

+ 53 - 0
Jellyfin.Data/Entities/Libraries/Season.cs

@@ -0,0 +1,53 @@
+using System;
+using System.Collections.Generic;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a season.
+    /// </summary>
+    public class Season : LibraryItem
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Season"/> class.
+        /// </summary>
+        /// <param name="series">The series.</param>
+        public Season(Series series)
+        {
+            if (series == null)
+            {
+                throw new ArgumentNullException(nameof(series));
+            }
+
+            series.Seasons.Add(this);
+
+            Episodes = new HashSet<Episode>();
+            SeasonMetadata = new HashSet<SeasonMetadata>();
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Season"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected Season()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the season number.
+        /// </summary>
+        public int? SeasonNumber { get; set; }
+
+        /// <summary>
+        /// Gets or sets the season metadata.
+        /// </summary>
+        public virtual ICollection<SeasonMetadata> SeasonMetadata { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing the number of episodes.
+        /// </summary>
+        public virtual ICollection<Episode> Episodes { get; protected set; }
+    }
+}

+ 47 - 0
Jellyfin.Data/Entities/Libraries/SeasonMetadata.cs

@@ -0,0 +1,47 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity that holds metadata for seasons.
+    /// </summary>
+    public class SeasonMetadata : Metadata
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="SeasonMetadata"/> class.
+        /// </summary>
+        /// <param name="title">The title or name of the object.</param>
+        /// <param name="language">ISO-639-3 3-character language codes.</param>
+        /// <param name="season">The season.</param>
+        public SeasonMetadata(string title, string language, Season season) : base(title, language)
+        {
+            if (season == null)
+            {
+                throw new ArgumentNullException(nameof(season));
+            }
+
+            season.SeasonMetadata.Add(this);
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="SeasonMetadata"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected SeasonMetadata()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the outline.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 1024.
+        /// </remarks>
+        [MaxLength(1024)]
+        [StringLength(1024)]
+        public string Outline { get; set; }
+    }
+}

+ 46 - 0
Jellyfin.Data/Entities/Libraries/Series.cs

@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a a series.
+    /// </summary>
+    public class Series : LibraryItem
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Series"/> class.
+        /// </summary>
+        public Series()
+        {
+            DateAdded = DateTime.UtcNow;
+            Seasons = new HashSet<Season>();
+            SeriesMetadata = new HashSet<SeriesMetadata>();
+        }
+
+        /// <summary>
+        /// Gets or sets the days of week.
+        /// </summary>
+        public DayOfWeek? AirsDayOfWeek { get; set; }
+
+        /// <summary>
+        /// Gets or sets the time the show airs, ignore the date portion.
+        /// </summary>
+        public DateTimeOffset? AirsTime { get; set; }
+
+        /// <summary>
+        /// Gets or sets the date the series first aired.
+        /// </summary>
+        public DateTime? FirstAired { get; set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing the series metadata.
+        /// </summary>
+        public virtual ICollection<SeriesMetadata> SeriesMetadata { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing the seasons.
+        /// </summary>
+        public virtual ICollection<Season> Seasons { get; protected set; }
+    }
+}

+ 91 - 0
Jellyfin.Data/Entities/Libraries/SeriesMetadata.cs

@@ -0,0 +1,91 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing series metadata.
+    /// </summary>
+    public class SeriesMetadata : Metadata, IHasCompanies
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="SeriesMetadata"/> class.
+        /// </summary>
+        /// <param name="title">The title or name of the object.</param>
+        /// <param name="language">ISO-639-3 3-character language codes.</param>
+        /// <param name="series">The series.</param>
+        public SeriesMetadata(string title, string language, Series series) : base(title, language)
+        {
+            if (series == null)
+            {
+                throw new ArgumentNullException(nameof(series));
+            }
+
+            series.SeriesMetadata.Add(this);
+
+            Networks = new HashSet<Company>();
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="SeriesMetadata"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected SeriesMetadata()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the outline.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 1024.
+        /// </remarks>
+        [MaxLength(1024)]
+        [StringLength(1024)]
+        public string Outline { get; set; }
+
+        /// <summary>
+        /// Gets or sets the plot.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 65535.
+        /// </remarks>
+        [MaxLength(65535)]
+        [StringLength(65535)]
+        public string Plot { get; set; }
+
+        /// <summary>
+        /// Gets or sets the tagline.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 1024.
+        /// </remarks>
+        [MaxLength(1024)]
+        [StringLength(1024)]
+        public string Tagline { get; set; }
+
+        /// <summary>
+        /// Gets or sets the country code.
+        /// </summary>
+        /// <remarks>
+        /// Max length = 2.
+        /// </remarks>
+        [MaxLength(2)]
+        [StringLength(2)]
+        public string Country { get; set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing the networks.
+        /// </summary>
+        public virtual ICollection<Company> Networks { get; protected set; }
+
+        /// <inheritdoc />
+        [NotMapped]
+        public ICollection<Company> Companies => Networks;
+    }
+}

+ 52 - 0
Jellyfin.Data/Entities/Libraries/Track.cs

@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using Jellyfin.Data.Interfaces;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity representing a track.
+    /// </summary>
+    public class Track : LibraryItem, IHasReleases
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Track"/> class.
+        /// </summary>
+        /// <param name="album">The album.</param>
+        public Track(MusicAlbum album)
+        {
+            if (album == null)
+            {
+                throw new ArgumentNullException(nameof(album));
+            }
+
+            album.Tracks.Add(this);
+
+            Releases = new HashSet<Release>();
+            TrackMetadata = new HashSet<TrackMetadata>();
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="Track"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected Track()
+        {
+        }
+
+        /// <summary>
+        /// Gets or sets the track number.
+        /// </summary>
+        public int? TrackNumber { get; set; }
+
+        /// <inheritdoc />
+        public virtual ICollection<Release> Releases { get; protected set; }
+
+        /// <summary>
+        /// Gets or sets a collection containing the track metadata.
+        /// </summary>
+        public virtual ICollection<TrackMetadata> TrackMetadata { get; protected set; }
+    }
+}

+ 36 - 0
Jellyfin.Data/Entities/Libraries/TrackMetadata.cs

@@ -0,0 +1,36 @@
+using System;
+
+namespace Jellyfin.Data.Entities.Libraries
+{
+    /// <summary>
+    /// An entity holding metadata for a track.
+    /// </summary>
+    public class TrackMetadata : Metadata
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TrackMetadata"/> class.
+        /// </summary>
+        /// <param name="title">The title or name of the object.</param>
+        /// <param name="language">ISO-639-3 3-character language codes.</param>
+        /// <param name="track">The track.</param>
+        public TrackMetadata(string title, string language, Track track) : base(title, language)
+        {
+            if (track == null)
+            {
+                throw new ArgumentNullException(nameof(track));
+            }
+
+            track.TrackMetadata.Add(this);
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="TrackMetadata"/> class.
+        /// </summary>
+        /// <remarks>
+        /// Default constructor. Protected due to required properties, but present because EF needs it.
+        /// </remarks>
+        protected TrackMetadata()
+        {
+        }
+    }
+}

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

@@ -1,153 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class Library
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected Library()
-        {
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static Library CreateLibraryUnsafe()
-        {
-            return new Library();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="name"></param>
-        public Library(string name)
-        {
-            if (string.IsNullOrEmpty(name))
-            {
-                throw new ArgumentNullException(nameof(name));
-            }
-
-            this.Name = name;
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="name"></param>
-        public static Library Create(string name)
-        {
-            return new Library(name);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Name.
-        /// </summary>
-        protected string _Name;
-        /// <summary>
-        /// When provided in a partial class, allows value of Name to be changed before setting.
-        /// </summary>
-        partial void SetName(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Name to be changed before returning.
-        /// </summary>
-        partial void GetName(ref string result);
-
-        /// <summary>
-        /// Required, Max length = 1024
-        /// </summary>
-        [Required]
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string Name
-        {
-            get
-            {
-                string value = _Name;
-                GetName(ref value);
-                return _Name = value;
-            }
-
-            set
-            {
-                string oldValue = _Name;
-                SetName(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Name = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-    }
-}
-

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

@@ -1,175 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public abstract partial class LibraryItem
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to being abstract.
-        /// </summary>
-        protected LibraryItem()
-        {
-            Init();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        protected LibraryItem(Guid urlid, DateTime dateadded)
-        {
-            this.UrlId = urlid;
-
-
-            Init();
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for UrlId.
-        /// </summary>
-        internal Guid _UrlId;
-        /// <summary>
-        /// When provided in a partial class, allows value of UrlId to be changed before setting.
-        /// </summary>
-        partial void SetUrlId(Guid oldValue, ref Guid newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of UrlId to be changed before returning.
-        /// </summary>
-        partial void GetUrlId(ref Guid result);
-
-        /// <summary>
-        /// Indexed, Required
-        /// This is whats gets displayed in the Urls and API requests. This could also be a string.
-        /// </summary>
-        [Required]
-        public Guid UrlId
-        {
-            get
-            {
-                Guid value = _UrlId;
-                GetUrlId(ref value);
-                return _UrlId = value;
-            }
-
-            set
-            {
-                Guid oldValue = _UrlId;
-                SetUrlId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _UrlId = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for DateAdded.
-        /// </summary>
-        protected DateTime _DateAdded;
-        /// <summary>
-        /// When provided in a partial class, allows value of DateAdded to be changed before setting.
-        /// </summary>
-        partial void SetDateAdded(DateTime oldValue, ref DateTime newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of DateAdded to be changed before returning.
-        /// </summary>
-        partial void GetDateAdded(ref DateTime result);
-
-        /// <summary>
-        /// Required.
-        /// </summary>
-        [Required]
-        public DateTime DateAdded
-        {
-            get
-            {
-                DateTime value = _DateAdded;
-                GetDateAdded(ref value);
-                return _DateAdded = value;
-            }
-
-            internal set
-            {
-                DateTime oldValue = _DateAdded;
-                SetDateAdded(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _DateAdded = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Required.
-        /// </summary>
-        [ForeignKey("LibraryRoot_Id")]
-        public virtual LibraryRoot LibraryRoot { get; set; }
-    }
-}
-

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

@@ -1,199 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class LibraryRoot
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected LibraryRoot()
-        {
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static LibraryRoot CreateLibraryRootUnsafe()
-        {
-            return new LibraryRoot();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="path">Absolute Path.</param>
-        public LibraryRoot(string path)
-        {
-            if (string.IsNullOrEmpty(path))
-            {
-                throw new ArgumentNullException(nameof(path));
-            }
-
-            this.Path = path;
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="path">Absolute Path.</param>
-        public static LibraryRoot Create(string path)
-        {
-            return new LibraryRoot(path);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Path.
-        /// </summary>
-        protected string _Path;
-        /// <summary>
-        /// When provided in a partial class, allows value of Path to be changed before setting.
-        /// </summary>
-        partial void SetPath(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Path to be changed before returning.
-        /// </summary>
-        partial void GetPath(ref string result);
-
-        /// <summary>
-        /// Required, Max length = 65535
-        /// Absolute Path.
-        /// </summary>
-        [Required]
-        [MaxLength(65535)]
-        [StringLength(65535)]
-        public string Path
-        {
-            get
-            {
-                string value = _Path;
-                GetPath(ref value);
-                return _Path = value;
-            }
-
-            set
-            {
-                string oldValue = _Path;
-                SetPath(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Path = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for NetworkPath.
-        /// </summary>
-        protected string _NetworkPath;
-        /// <summary>
-        /// When provided in a partial class, allows value of NetworkPath to be changed before setting.
-        /// </summary>
-        partial void SetNetworkPath(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of NetworkPath to be changed before returning.
-        /// </summary>
-        partial void GetNetworkPath(ref string result);
-
-        /// <summary>
-        /// Max length = 65535
-        /// Absolute network path, for example for transcoding sattelites.
-        /// </summary>
-        [MaxLength(65535)]
-        [StringLength(65535)]
-        public string NetworkPath
-        {
-            get
-            {
-                string value = _NetworkPath;
-                GetNetworkPath(ref value);
-                return _NetworkPath = value;
-            }
-
-            set
-            {
-                string oldValue = _NetworkPath;
-                SetNetworkPath(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _NetworkPath = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Required.
-        /// </summary>
-        [ForeignKey("Library_Id")]
-        public virtual Library Library { get; set; }
-    }
-}
-

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

@@ -1,212 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class MediaFile
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected MediaFile()
-        {
-            MediaFileStreams = new HashSet<MediaFileStream>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static MediaFile CreateMediaFileUnsafe()
-        {
-            return new MediaFile();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="path">Relative to the LibraryRoot.</param>
-        /// <param name="kind"></param>
-        /// <param name="_release0"></param>
-        public MediaFile(string path, Enums.MediaFileKind kind, Release _release0)
-        {
-            if (string.IsNullOrEmpty(path))
-            {
-                throw new ArgumentNullException(nameof(path));
-            }
-
-            this.Path = path;
-
-            this.Kind = kind;
-
-            if (_release0 == null)
-            {
-                throw new ArgumentNullException(nameof(_release0));
-            }
-
-            _release0.MediaFiles.Add(this);
-
-            this.MediaFileStreams = new HashSet<MediaFileStream>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="path">Relative to the LibraryRoot.</param>
-        /// <param name="kind"></param>
-        /// <param name="_release0"></param>
-        public static MediaFile Create(string path, Enums.MediaFileKind kind, Release _release0)
-        {
-            return new MediaFile(path, kind, _release0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Path.
-        /// </summary>
-        protected string _Path;
-        /// <summary>
-        /// When provided in a partial class, allows value of Path to be changed before setting.
-        /// </summary>
-        partial void SetPath(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Path to be changed before returning.
-        /// </summary>
-        partial void GetPath(ref string result);
-
-        /// <summary>
-        /// Required, Max length = 65535
-        /// Relative to the LibraryRoot.
-        /// </summary>
-        [Required]
-        [MaxLength(65535)]
-        [StringLength(65535)]
-        public string Path
-        {
-            get
-            {
-                string value = _Path;
-                GetPath(ref value);
-                return _Path = value;
-            }
-
-            set
-            {
-                string oldValue = _Path;
-                SetPath(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Path = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Kind.
-        /// </summary>
-        protected Enums.MediaFileKind _Kind;
-        /// <summary>
-        /// When provided in a partial class, allows value of Kind to be changed before setting.
-        /// </summary>
-        partial void SetKind(Enums.MediaFileKind oldValue, ref Enums.MediaFileKind newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Kind to be changed before returning.
-        /// </summary>
-        partial void GetKind(ref Enums.MediaFileKind result);
-
-        /// <summary>
-        /// Required.
-        /// </summary>
-        [Required]
-        public Enums.MediaFileKind Kind
-        {
-            get
-            {
-                Enums.MediaFileKind value = _Kind;
-                GetKind(ref value);
-                return _Kind = value;
-            }
-
-            set
-            {
-                Enums.MediaFileKind oldValue = _Kind;
-                SetKind(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Kind = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-
-        [ForeignKey("MediaFileStream_MediaFileStreams_Id")]
-        public virtual ICollection<MediaFileStream> MediaFileStreams { get; protected set; }
-    }
-}
-

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

@@ -1,155 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class MediaFileStream
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected MediaFileStream()
-        {
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static MediaFileStream CreateMediaFileStreamUnsafe()
-        {
-            return new MediaFileStream();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="streamnumber"></param>
-        /// <param name="_mediafile0"></param>
-        public MediaFileStream(int streamnumber, MediaFile _mediafile0)
-        {
-            this.StreamNumber = streamnumber;
-
-            if (_mediafile0 == null)
-            {
-                throw new ArgumentNullException(nameof(_mediafile0));
-            }
-
-            _mediafile0.MediaFileStreams.Add(this);
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="streamnumber"></param>
-        /// <param name="_mediafile0"></param>
-        public static MediaFileStream Create(int streamnumber, MediaFile _mediafile0)
-        {
-            return new MediaFileStream(streamnumber, _mediafile0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for StreamNumber.
-        /// </summary>
-        protected int _StreamNumber;
-        /// <summary>
-        /// When provided in a partial class, allows value of StreamNumber to be changed before setting.
-        /// </summary>
-        partial void SetStreamNumber(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of StreamNumber to be changed before returning.
-        /// </summary>
-        partial void GetStreamNumber(ref int result);
-
-        /// <summary>
-        /// Required.
-        /// </summary>
-        [Required]
-        public int StreamNumber
-        {
-            get
-            {
-                int value = _StreamNumber;
-                GetStreamNumber(ref value);
-                return _StreamNumber = value;
-            }
-
-            set
-            {
-                int oldValue = _StreamNumber;
-                SetStreamNumber(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _StreamNumber = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-    }
-}
-

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

@@ -1,399 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public abstract partial class Metadata
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to being abstract.
-        /// </summary>
-        protected Metadata()
-        {
-            PersonRoles = new HashSet<PersonRole>();
-            Genres = new HashSet<Genre>();
-            Artwork = new HashSet<Artwork>();
-            Ratings = new HashSet<Rating>();
-            Sources = new HashSet<MetadataProviderId>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        protected Metadata(string title, string language, DateTime dateadded, DateTime datemodified)
-        {
-            if (string.IsNullOrEmpty(title))
-            {
-                throw new ArgumentNullException(nameof(title));
-            }
-
-            this.Title = title;
-
-            if (string.IsNullOrEmpty(language))
-            {
-                throw new ArgumentNullException(nameof(language));
-            }
-
-            this.Language = language;
-
-            this.PersonRoles = new HashSet<PersonRole>();
-            this.Genres = new HashSet<Genre>();
-            this.Artwork = new HashSet<Artwork>();
-            this.Ratings = new HashSet<Rating>();
-            this.Sources = new HashSet<MetadataProviderId>();
-
-            Init();
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Title.
-        /// </summary>
-        protected string _Title;
-        /// <summary>
-        /// When provided in a partial class, allows value of Title to be changed before setting.
-        /// </summary>
-        partial void SetTitle(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Title to be changed before returning.
-        /// </summary>
-        partial void GetTitle(ref string result);
-
-        /// <summary>
-        /// Required, Max length = 1024
-        /// The title or name of the object.
-        /// </summary>
-        [Required]
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string Title
-        {
-            get
-            {
-                string value = _Title;
-                GetTitle(ref value);
-                return _Title = value;
-            }
-
-            set
-            {
-                string oldValue = _Title;
-                SetTitle(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Title = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for OriginalTitle.
-        /// </summary>
-        protected string _OriginalTitle;
-        /// <summary>
-        /// When provided in a partial class, allows value of OriginalTitle to be changed before setting.
-        /// </summary>
-        partial void SetOriginalTitle(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of OriginalTitle to be changed before returning.
-        /// </summary>
-        partial void GetOriginalTitle(ref string result);
-
-        /// <summary>
-        /// Max length = 1024
-        /// </summary>
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string OriginalTitle
-        {
-            get
-            {
-                string value = _OriginalTitle;
-                GetOriginalTitle(ref value);
-                return _OriginalTitle = value;
-            }
-
-            set
-            {
-                string oldValue = _OriginalTitle;
-                SetOriginalTitle(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _OriginalTitle = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for SortTitle.
-        /// </summary>
-        protected string _SortTitle;
-        /// <summary>
-        /// When provided in a partial class, allows value of SortTitle to be changed before setting.
-        /// </summary>
-        partial void SetSortTitle(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of SortTitle to be changed before returning.
-        /// </summary>
-        partial void GetSortTitle(ref string result);
-
-        /// <summary>
-        /// Max length = 1024
-        /// </summary>
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string SortTitle
-        {
-            get
-            {
-                string value = _SortTitle;
-                GetSortTitle(ref value);
-                return _SortTitle = value;
-            }
-
-            set
-            {
-                string oldValue = _SortTitle;
-                SetSortTitle(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _SortTitle = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Language.
-        /// </summary>
-        protected string _Language;
-        /// <summary>
-        /// When provided in a partial class, allows value of Language to be changed before setting.
-        /// </summary>
-        partial void SetLanguage(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Language to be changed before returning.
-        /// </summary>
-        partial void GetLanguage(ref string result);
-
-        /// <summary>
-        /// Required, Min length = 3, Max length = 3
-        /// ISO-639-3 3-character language codes.
-        /// </summary>
-        [Required]
-        [MinLength(3)]
-        [MaxLength(3)]
-        [StringLength(3)]
-        public string Language
-        {
-            get
-            {
-                string value = _Language;
-                GetLanguage(ref value);
-                return _Language = value;
-            }
-
-            set
-            {
-                string oldValue = _Language;
-                SetLanguage(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Language = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for ReleaseDate.
-        /// </summary>
-        protected DateTimeOffset? _ReleaseDate;
-        /// <summary>
-        /// When provided in a partial class, allows value of ReleaseDate to be changed before setting.
-        /// </summary>
-        partial void SetReleaseDate(DateTimeOffset? oldValue, ref DateTimeOffset? newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of ReleaseDate to be changed before returning.
-        /// </summary>
-        partial void GetReleaseDate(ref DateTimeOffset? result);
-
-        public DateTimeOffset? ReleaseDate
-        {
-            get
-            {
-                DateTimeOffset? value = _ReleaseDate;
-                GetReleaseDate(ref value);
-                return _ReleaseDate = value;
-            }
-
-            set
-            {
-                DateTimeOffset? oldValue = _ReleaseDate;
-                SetReleaseDate(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _ReleaseDate = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for DateAdded.
-        /// </summary>
-        protected DateTime _DateAdded;
-        /// <summary>
-        /// When provided in a partial class, allows value of DateAdded to be changed before setting.
-        /// </summary>
-        partial void SetDateAdded(DateTime oldValue, ref DateTime newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of DateAdded to be changed before returning.
-        /// </summary>
-        partial void GetDateAdded(ref DateTime result);
-
-        /// <summary>
-        /// Required.
-        /// </summary>
-        [Required]
-        public DateTime DateAdded
-        {
-            get
-            {
-                DateTime value = _DateAdded;
-                GetDateAdded(ref value);
-                return _DateAdded = value;
-            }
-
-            internal set
-            {
-                DateTime oldValue = _DateAdded;
-                SetDateAdded(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _DateAdded = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for DateModified.
-        /// </summary>
-        protected DateTime _DateModified;
-        /// <summary>
-        /// When provided in a partial class, allows value of DateModified to be changed before setting.
-        /// </summary>
-        partial void SetDateModified(DateTime oldValue, ref DateTime newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of DateModified to be changed before returning.
-        /// </summary>
-        partial void GetDateModified(ref DateTime result);
-
-        /// <summary>
-        /// Required.
-        /// </summary>
-        [Required]
-        public DateTime DateModified
-        {
-            get
-            {
-                DateTime value = _DateModified;
-                GetDateModified(ref value);
-                return _DateModified = value;
-            }
-
-            internal set
-            {
-                DateTime oldValue = _DateModified;
-                SetDateModified(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _DateModified = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-
-        [ForeignKey("PersonRole_PersonRoles_Id")]
-        public virtual ICollection<PersonRole> PersonRoles { get; protected set; }
-
-        [ForeignKey("PersonRole_PersonRoles_Id")]
-        public virtual ICollection<Genre> Genres { get; protected set; }
-
-        [ForeignKey("PersonRole_PersonRoles_Id")]
-        public virtual ICollection<Artwork> Artwork { get; protected set; }
-
-        [ForeignKey("PersonRole_PersonRoles_Id")]
-        public virtual ICollection<Rating> Ratings { get; protected set; }
-
-        [ForeignKey("PersonRole_PersonRoles_Id")]
-        public virtual ICollection<MetadataProviderId> Sources { get; protected set; }
-    }
-}
-

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

@@ -1,153 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class MetadataProvider
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected MetadataProvider()
-        {
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static MetadataProvider CreateMetadataProviderUnsafe()
-        {
-            return new MetadataProvider();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="name"></param>
-        public MetadataProvider(string name)
-        {
-            if (string.IsNullOrEmpty(name))
-            {
-                throw new ArgumentNullException(nameof(name));
-            }
-
-            this.Name = name;
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="name"></param>
-        public static MetadataProvider Create(string name)
-        {
-            return new MetadataProvider(name);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Name.
-        /// </summary>
-        protected string _Name;
-        /// <summary>
-        /// When provided in a partial class, allows value of Name to be changed before setting.
-        /// </summary>
-        partial void SetName(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Name to be changed before returning.
-        /// </summary>
-        partial void GetName(ref string result);
-
-        /// <summary>
-        /// Required, Max length = 1024
-        /// </summary>
-        [Required]
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string Name
-        {
-            get
-            {
-                string value = _Name;
-                GetName(ref value);
-                return _Name = value;
-            }
-
-            set
-            {
-                string oldValue = _Name;
-                SetName(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Name = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-    }
-}
-

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

@@ -1,201 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class MetadataProviderId
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected MetadataProviderId()
-        {
-            // NOTE: This class has one-to-one associations with MetadataProviderId.
-            // One-to-one associations are not validated in constructors since this causes a scenario where each one must be constructed before the other.
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static MetadataProviderId CreateMetadataProviderIdUnsafe()
-        {
-            return new MetadataProviderId();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="providerid"></param>
-        /// <param name="_metadata0"></param>
-        /// <param name="_person1"></param>
-        /// <param name="_personrole2"></param>
-        /// <param name="_ratingsource3"></param>
-        public MetadataProviderId(string providerid, Metadata _metadata0, Person _person1, PersonRole _personrole2, RatingSource _ratingsource3)
-        {
-            // NOTE: This class has one-to-one associations with MetadataProviderId.
-            // One-to-one associations are not validated in constructors since this causes a scenario where each one must be constructed before the other.
-
-            if (string.IsNullOrEmpty(providerid))
-            {
-                throw new ArgumentNullException(nameof(providerid));
-            }
-
-            this.ProviderId = providerid;
-
-            if (_metadata0 == null)
-            {
-                throw new ArgumentNullException(nameof(_metadata0));
-            }
-
-            _metadata0.Sources.Add(this);
-
-            if (_person1 == null)
-            {
-                throw new ArgumentNullException(nameof(_person1));
-            }
-
-            _person1.Sources.Add(this);
-
-            if (_personrole2 == null)
-            {
-                throw new ArgumentNullException(nameof(_personrole2));
-            }
-
-            _personrole2.Sources.Add(this);
-
-            if (_ratingsource3 == null)
-            {
-                throw new ArgumentNullException(nameof(_ratingsource3));
-            }
-
-            _ratingsource3.Source = this;
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="providerid"></param>
-        /// <param name="_metadata0"></param>
-        /// <param name="_person1"></param>
-        /// <param name="_personrole2"></param>
-        /// <param name="_ratingsource3"></param>
-        public static MetadataProviderId Create(string providerid, Metadata _metadata0, Person _person1, PersonRole _personrole2, RatingSource _ratingsource3)
-        {
-            return new MetadataProviderId(providerid, _metadata0, _person1, _personrole2, _ratingsource3);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for ProviderId.
-        /// </summary>
-        protected string _ProviderId;
-        /// <summary>
-        /// When provided in a partial class, allows value of ProviderId to be changed before setting.
-        /// </summary>
-        partial void SetProviderId(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of ProviderId to be changed before returning.
-        /// </summary>
-        partial void GetProviderId(ref string result);
-
-        /// <summary>
-        /// Required, Max length = 255
-        /// </summary>
-        [Required]
-        [MaxLength(255)]
-        [StringLength(255)]
-        public string ProviderId
-        {
-            get
-            {
-                string value = _ProviderId;
-                GetProviderId(ref value);
-                return _ProviderId = value;
-            }
-
-            set
-            {
-                string oldValue = _ProviderId;
-                SetProviderId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _ProviderId = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Required.
-        /// </summary>
-        [ForeignKey("MetadataProvider_Id")]
-        public virtual MetadataProvider MetadataProvider { get; set; }
-    }
-}
-

+ 0 - 72
Jellyfin.Data/Entities/Movie.cs

@@ -1,72 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class Movie : LibraryItem
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected Movie()
-        {
-            Releases = new HashSet<Release>();
-            MovieMetadata = new HashSet<MovieMetadata>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static Movie CreateMovieUnsafe()
-        {
-            return new Movie();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        public Movie(Guid urlid, DateTime dateadded)
-        {
-            this.UrlId = urlid;
-
-            this.Releases = new HashSet<Release>();
-            this.MovieMetadata = new HashSet<MovieMetadata>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        public static Movie Create(Guid urlid, DateTime dateadded)
-        {
-            return new Movie(urlid, dateadded);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-
-        [ForeignKey("Release_Releases_Id")]
-        public virtual ICollection<Release> Releases { get; protected set; }
-
-        [ForeignKey("MovieMetadata_MovieMetadata_Id")]
-        public virtual ICollection<MovieMetadata> MovieMetadata { get; protected set; }
-    }
-}
-

+ 0 - 244
Jellyfin.Data/Entities/MovieMetadata.cs

@@ -1,244 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class MovieMetadata : Metadata
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected MovieMetadata()
-        {
-            Studios = new HashSet<Company>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static MovieMetadata CreateMovieMetadataUnsafe()
-        {
-            return new MovieMetadata();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_movie0"></param>
-        public MovieMetadata(string title, string language, DateTime dateadded, DateTime datemodified, Movie _movie0)
-        {
-            if (string.IsNullOrEmpty(title))
-            {
-                throw new ArgumentNullException(nameof(title));
-            }
-
-            this.Title = title;
-
-            if (string.IsNullOrEmpty(language))
-            {
-                throw new ArgumentNullException(nameof(language));
-            }
-
-            this.Language = language;
-
-            if (_movie0 == null)
-            {
-                throw new ArgumentNullException(nameof(_movie0));
-            }
-
-            _movie0.MovieMetadata.Add(this);
-
-            this.Studios = new HashSet<Company>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_movie0"></param>
-        public static MovieMetadata Create(string title, string language, DateTime dateadded, DateTime datemodified, Movie _movie0)
-        {
-            return new MovieMetadata(title, language, dateadded, datemodified, _movie0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Outline.
-        /// </summary>
-        protected string _Outline;
-        /// <summary>
-        /// When provided in a partial class, allows value of Outline to be changed before setting.
-        /// </summary>
-        partial void SetOutline(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Outline to be changed before returning.
-        /// </summary>
-        partial void GetOutline(ref string result);
-
-        /// <summary>
-        /// Max length = 1024
-        /// </summary>
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string Outline
-        {
-            get
-            {
-                string value = _Outline;
-                GetOutline(ref value);
-                return _Outline = value;
-            }
-
-            set
-            {
-                string oldValue = _Outline;
-                SetOutline(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Outline = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Plot.
-        /// </summary>
-        protected string _Plot;
-        /// <summary>
-        /// When provided in a partial class, allows value of Plot to be changed before setting.
-        /// </summary>
-        partial void SetPlot(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Plot to be changed before returning.
-        /// </summary>
-        partial void GetPlot(ref string result);
-
-        /// <summary>
-        /// Max length = 65535
-        /// </summary>
-        [MaxLength(65535)]
-        [StringLength(65535)]
-        public string Plot
-        {
-            get
-            {
-                string value = _Plot;
-                GetPlot(ref value);
-                return _Plot = value;
-            }
-
-            set
-            {
-                string oldValue = _Plot;
-                SetPlot(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Plot = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Tagline.
-        /// </summary>
-        protected string _Tagline;
-        /// <summary>
-        /// When provided in a partial class, allows value of Tagline to be changed before setting.
-        /// </summary>
-        partial void SetTagline(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Tagline to be changed before returning.
-        /// </summary>
-        partial void GetTagline(ref string result);
-
-        /// <summary>
-        /// Max length = 1024
-        /// </summary>
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string Tagline
-        {
-            get
-            {
-                string value = _Tagline;
-                GetTagline(ref value);
-                return _Tagline = value;
-            }
-
-            set
-            {
-                string oldValue = _Tagline;
-                SetTagline(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Tagline = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Country.
-        /// </summary>
-        protected string _Country;
-        /// <summary>
-        /// When provided in a partial class, allows value of Country to be changed before setting.
-        /// </summary>
-        partial void SetCountry(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Country to be changed before returning.
-        /// </summary>
-        partial void GetCountry(ref string result);
-
-        /// <summary>
-        /// Max length = 2
-        /// </summary>
-        [MaxLength(2)]
-        [StringLength(2)]
-        public string Country
-        {
-            get
-            {
-                string value = _Country;
-                GetCountry(ref value);
-                return _Country = value;
-            }
-
-            set
-            {
-                string oldValue = _Country;
-                SetCountry(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Country = value;
-                }
-            }
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-        [ForeignKey("Company_Studios_Id")]
-        public virtual ICollection<Company> Studios { get; protected set; }
-    }
-}
-

+ 0 - 71
Jellyfin.Data/Entities/MusicAlbum.cs

@@ -1,71 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class MusicAlbum : LibraryItem
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected MusicAlbum()
-        {
-            MusicAlbumMetadata = new HashSet<MusicAlbumMetadata>();
-            Tracks = new HashSet<Track>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static MusicAlbum CreateMusicAlbumUnsafe()
-        {
-            return new MusicAlbum();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        public MusicAlbum(Guid urlid, DateTime dateadded)
-        {
-            this.UrlId = urlid;
-
-            this.MusicAlbumMetadata = new HashSet<MusicAlbumMetadata>();
-            this.Tracks = new HashSet<Track>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        public static MusicAlbum Create(Guid urlid, DateTime dateadded)
-        {
-            return new MusicAlbum(urlid, dateadded);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-        [ForeignKey("MusicAlbumMetadata_MusicAlbumMetadata_Id")]
-        public virtual ICollection<MusicAlbumMetadata> MusicAlbumMetadata { get; protected set; }
-
-        [ForeignKey("Track_Tracks_Id")]
-        public virtual ICollection<Track> Tracks { get; protected set; }
-    }
-}
-

+ 0 - 207
Jellyfin.Data/Entities/MusicAlbumMetadata.cs

@@ -1,207 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class MusicAlbumMetadata : Metadata
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected MusicAlbumMetadata()
-        {
-            Labels = new HashSet<Company>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static MusicAlbumMetadata CreateMusicAlbumMetadataUnsafe()
-        {
-            return new MusicAlbumMetadata();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_musicalbum0"></param>
-        public MusicAlbumMetadata(string title, string language, DateTime dateadded, DateTime datemodified, MusicAlbum _musicalbum0)
-        {
-            if (string.IsNullOrEmpty(title))
-            {
-                throw new ArgumentNullException(nameof(title));
-            }
-
-            this.Title = title;
-
-            if (string.IsNullOrEmpty(language))
-            {
-                throw new ArgumentNullException(nameof(language));
-            }
-
-            this.Language = language;
-
-            if (_musicalbum0 == null)
-            {
-                throw new ArgumentNullException(nameof(_musicalbum0));
-            }
-
-            _musicalbum0.MusicAlbumMetadata.Add(this);
-
-            this.Labels = new HashSet<Company>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_musicalbum0"></param>
-        public static MusicAlbumMetadata Create(string title, string language, DateTime dateadded, DateTime datemodified, MusicAlbum _musicalbum0)
-        {
-            return new MusicAlbumMetadata(title, language, dateadded, datemodified, _musicalbum0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Barcode.
-        /// </summary>
-        protected string _Barcode;
-        /// <summary>
-        /// When provided in a partial class, allows value of Barcode to be changed before setting.
-        /// </summary>
-        partial void SetBarcode(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Barcode to be changed before returning.
-        /// </summary>
-        partial void GetBarcode(ref string result);
-
-        /// <summary>
-        /// Max length = 255
-        /// </summary>
-        [MaxLength(255)]
-        [StringLength(255)]
-        public string Barcode
-        {
-            get
-            {
-                string value = _Barcode;
-                GetBarcode(ref value);
-                return _Barcode = value;
-            }
-
-            set
-            {
-                string oldValue = _Barcode;
-                SetBarcode(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Barcode = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for LabelNumber.
-        /// </summary>
-        protected string _LabelNumber;
-        /// <summary>
-        /// When provided in a partial class, allows value of LabelNumber to be changed before setting.
-        /// </summary>
-        partial void SetLabelNumber(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of LabelNumber to be changed before returning.
-        /// </summary>
-        partial void GetLabelNumber(ref string result);
-
-        /// <summary>
-        /// Max length = 255
-        /// </summary>
-        [MaxLength(255)]
-        [StringLength(255)]
-        public string LabelNumber
-        {
-            get
-            {
-                string value = _LabelNumber;
-                GetLabelNumber(ref value);
-                return _LabelNumber = value;
-            }
-
-            set
-            {
-                string oldValue = _LabelNumber;
-                SetLabelNumber(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _LabelNumber = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Country.
-        /// </summary>
-        protected string _Country;
-        /// <summary>
-        /// When provided in a partial class, allows value of Country to be changed before setting.
-        /// </summary>
-        partial void SetCountry(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Country to be changed before returning.
-        /// </summary>
-        partial void GetCountry(ref string result);
-
-        /// <summary>
-        /// Max length = 2
-        /// </summary>
-        [MaxLength(2)]
-        [StringLength(2)]
-        public string Country
-        {
-            get
-            {
-                string value = _Country;
-                GetCountry(ref value);
-                return _Country = value;
-            }
-
-            set
-            {
-                string oldValue = _Country;
-                SetCountry(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Country = value;
-                }
-            }
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-
-        [ForeignKey("Company_Labels_Id")]
-        public virtual ICollection<Company> Labels { get; protected set; }
-    }
-}
-

+ 2 - 1
Jellyfin.Data/Entities/Permission.cs

@@ -3,13 +3,14 @@
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
 using Jellyfin.Data.Enums;
+using Jellyfin.Data.Interfaces;
 
 namespace Jellyfin.Data.Entities
 {
     /// <summary>
     /// An entity representing whether the associated user has a specific permission.
     /// </summary>
-    public partial class Permission : ISavingChanges
+    public partial class Permission : IHasConcurrencyToken
     {
         /// <summary>
         /// Initializes a new instance of the <see cref="Permission"/> class.

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

@@ -1,317 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class Person
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected Person()
-        {
-            Sources = new HashSet<MetadataProviderId>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static Person CreatePersonUnsafe()
-        {
-            return new Person();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="urlid"></param>
-        /// <param name="name"></param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        public Person(Guid urlid, string name, DateTime dateadded, DateTime datemodified)
-        {
-            this.UrlId = urlid;
-
-            if (string.IsNullOrEmpty(name))
-            {
-                throw new ArgumentNullException(nameof(name));
-            }
-
-            this.Name = name;
-
-            this.Sources = new HashSet<MetadataProviderId>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="urlid"></param>
-        /// <param name="name"></param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        public static Person Create(Guid urlid, string name, DateTime dateadded, DateTime datemodified)
-        {
-            return new Person(urlid, name, dateadded, datemodified);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for UrlId.
-        /// </summary>
-        protected Guid _UrlId;
-        /// <summary>
-        /// When provided in a partial class, allows value of UrlId to be changed before setting.
-        /// </summary>
-        partial void SetUrlId(Guid oldValue, ref Guid newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of UrlId to be changed before returning.
-        /// </summary>
-        partial void GetUrlId(ref Guid result);
-
-        /// <summary>
-        /// Required.
-        /// </summary>
-        [Required]
-        public Guid UrlId
-        {
-            get
-            {
-                Guid value = _UrlId;
-                GetUrlId(ref value);
-                return _UrlId = value;
-            }
-
-            set
-            {
-                Guid oldValue = _UrlId;
-                SetUrlId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _UrlId = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Name.
-        /// </summary>
-        protected string _Name;
-        /// <summary>
-        /// When provided in a partial class, allows value of Name to be changed before setting.
-        /// </summary>
-        partial void SetName(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Name to be changed before returning.
-        /// </summary>
-        partial void GetName(ref string result);
-
-        /// <summary>
-        /// Required, Max length = 1024
-        /// </summary>
-        [Required]
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string Name
-        {
-            get
-            {
-                string value = _Name;
-                GetName(ref value);
-                return _Name = value;
-            }
-
-            set
-            {
-                string oldValue = _Name;
-                SetName(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Name = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for SourceId.
-        /// </summary>
-        protected string _SourceId;
-        /// <summary>
-        /// When provided in a partial class, allows value of SourceId to be changed before setting.
-        /// </summary>
-        partial void SetSourceId(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of SourceId to be changed before returning.
-        /// </summary>
-        partial void GetSourceId(ref string result);
-
-        /// <summary>
-        /// Max length = 255
-        /// </summary>
-        [MaxLength(255)]
-        [StringLength(255)]
-        public string SourceId
-        {
-            get
-            {
-                string value = _SourceId;
-                GetSourceId(ref value);
-                return _SourceId = value;
-            }
-
-            set
-            {
-                string oldValue = _SourceId;
-                SetSourceId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _SourceId = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for DateAdded.
-        /// </summary>
-        protected DateTime _DateAdded;
-        /// <summary>
-        /// When provided in a partial class, allows value of DateAdded to be changed before setting.
-        /// </summary>
-        partial void SetDateAdded(DateTime oldValue, ref DateTime newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of DateAdded to be changed before returning.
-        /// </summary>
-        partial void GetDateAdded(ref DateTime result);
-
-        /// <summary>
-        /// Required.
-        /// </summary>
-        [Required]
-        public DateTime DateAdded
-        {
-            get
-            {
-                DateTime value = _DateAdded;
-                GetDateAdded(ref value);
-                return _DateAdded = value;
-            }
-
-            internal set
-            {
-                DateTime oldValue = _DateAdded;
-                SetDateAdded(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _DateAdded = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for DateModified.
-        /// </summary>
-        protected DateTime _DateModified;
-        /// <summary>
-        /// When provided in a partial class, allows value of DateModified to be changed before setting.
-        /// </summary>
-        partial void SetDateModified(DateTime oldValue, ref DateTime newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of DateModified to be changed before returning.
-        /// </summary>
-        partial void GetDateModified(ref DateTime result);
-
-        /// <summary>
-        /// Required.
-        /// </summary>
-        [Required]
-        public DateTime DateModified
-        {
-            get
-            {
-                DateTime value = _DateModified;
-                GetDateModified(ref value);
-                return _DateModified = value;
-            }
-
-            internal set
-            {
-                DateTime oldValue = _DateModified;
-                SetDateModified(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _DateModified = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-        [ForeignKey("MetadataProviderId_Sources_Id")]
-        public virtual ICollection<MetadataProviderId> Sources { get; protected set; }
-    }
-}
-

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

@@ -1,217 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class PersonRole
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected PersonRole()
-        {
-            // NOTE: This class has one-to-one associations with PersonRole.
-            // One-to-one associations are not validated in constructors since this causes a scenario where each one must be constructed before the other.
-
-            Sources = new HashSet<MetadataProviderId>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static PersonRole CreatePersonRoleUnsafe()
-        {
-            return new PersonRole();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="type"></param>
-        /// <param name="_metadata0"></param>
-        public PersonRole(Enums.PersonRoleType type, Metadata _metadata0)
-        {
-            // NOTE: This class has one-to-one associations with PersonRole.
-            // One-to-one associations are not validated in constructors since this causes a scenario where each one must be constructed before the other.
-
-            this.Type = type;
-
-            if (_metadata0 == null)
-            {
-                throw new ArgumentNullException(nameof(_metadata0));
-            }
-
-            _metadata0.PersonRoles.Add(this);
-
-            this.Sources = new HashSet<MetadataProviderId>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="type"></param>
-        /// <param name="_metadata0"></param>
-        public static PersonRole Create(Enums.PersonRoleType type, Metadata _metadata0)
-        {
-            return new PersonRole(type, _metadata0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Role.
-        /// </summary>
-        protected string _Role;
-        /// <summary>
-        /// When provided in a partial class, allows value of Role to be changed before setting.
-        /// </summary>
-        partial void SetRole(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Role to be changed before returning.
-        /// </summary>
-        partial void GetRole(ref string result);
-
-        /// <summary>
-        /// Max length = 1024
-        /// </summary>
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string Role
-        {
-            get
-            {
-                string value = _Role;
-                GetRole(ref value);
-                return _Role = value;
-            }
-
-            set
-            {
-                string oldValue = _Role;
-                SetRole(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Role = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Type.
-        /// </summary>
-        protected Enums.PersonRoleType _Type;
-        /// <summary>
-        /// When provided in a partial class, allows value of Type to be changed before setting.
-        /// </summary>
-        partial void SetType(Enums.PersonRoleType oldValue, ref Enums.PersonRoleType newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Type to be changed before returning.
-        /// </summary>
-        partial void GetType(ref Enums.PersonRoleType result);
-
-        /// <summary>
-        /// Required.
-        /// </summary>
-        [Required]
-        public Enums.PersonRoleType Type
-        {
-            get
-            {
-                Enums.PersonRoleType value = _Type;
-                GetType(ref value);
-                return _Type = value;
-            }
-
-            set
-            {
-                Enums.PersonRoleType oldValue = _Type;
-                SetType(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Type = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Required.
-        /// </summary>
-        [ForeignKey("Person_Id")]
-
-        public virtual Person Person { get; set; }
-
-        [ForeignKey("Artwork_Artwork_Id")]
-        public virtual Artwork Artwork { get; set; }
-
-        [ForeignKey("MetadataProviderId_Sources_Id")]
-        public virtual ICollection<MetadataProviderId> Sources { get; protected set; }
-    }
-}
-

+ 0 - 71
Jellyfin.Data/Entities/Photo.cs

@@ -1,71 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class Photo : LibraryItem
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected Photo()
-        {
-            PhotoMetadata = new HashSet<PhotoMetadata>();
-            Releases = new HashSet<Release>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static Photo CreatePhotoUnsafe()
-        {
-            return new Photo();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        public Photo(Guid urlid, DateTime dateadded)
-        {
-            this.UrlId = urlid;
-
-            this.PhotoMetadata = new HashSet<PhotoMetadata>();
-            this.Releases = new HashSet<Release>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        public static Photo Create(Guid urlid, DateTime dateadded)
-        {
-            return new Photo(urlid, dateadded);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-        [ForeignKey("PhotoMetadata_PhotoMetadata_Id")]
-        public virtual ICollection<PhotoMetadata> PhotoMetadata { get; protected set; }
-
-        [ForeignKey("Release_Releases_Id")]
-        public virtual ICollection<Release> Releases { get; protected set; }
-    }
-}
-

+ 0 - 84
Jellyfin.Data/Entities/PhotoMetadata.cs

@@ -1,84 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class PhotoMetadata : Metadata
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected PhotoMetadata()
-        {
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static PhotoMetadata CreatePhotoMetadataUnsafe()
-        {
-            return new PhotoMetadata();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_photo0"></param>
-        public PhotoMetadata(string title, string language, DateTime dateadded, DateTime datemodified, Photo _photo0)
-        {
-            if (string.IsNullOrEmpty(title))
-            {
-                throw new ArgumentNullException(nameof(title));
-            }
-
-            this.Title = title;
-
-            if (string.IsNullOrEmpty(language))
-            {
-                throw new ArgumentNullException(nameof(language));
-            }
-
-            this.Language = language;
-
-            if (_photo0 == null)
-            {
-                throw new ArgumentNullException(nameof(_photo0));
-            }
-
-            _photo0.PhotoMetadata.Add(this);
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_photo0"></param>
-        public static PhotoMetadata Create(string title, string language, DateTime dateadded, DateTime datemodified, Photo _photo0)
-        {
-            return new PhotoMetadata(title, language, dateadded, datemodified, _photo0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-    }
-}
-

+ 2 - 1
Jellyfin.Data/Entities/Preference.cs

@@ -2,13 +2,14 @@ using System;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
 using Jellyfin.Data.Enums;
+using Jellyfin.Data.Interfaces;
 
 namespace Jellyfin.Data.Entities
 {
     /// <summary>
     /// An entity representing a preference attached to a user or group.
     /// </summary>
-    public class Preference : ISavingChanges
+    public class Preference : IHasConcurrencyToken
     {
         /// <summary>
         /// Initializes a new instance of the <see cref="Preference"/> class.

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

@@ -1,194 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class Rating
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected Rating()
-        {
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static Rating CreateRatingUnsafe()
-        {
-            return new Rating();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="value"></param>
-        /// <param name="_metadata0"></param>
-        public Rating(double value, Metadata _metadata0)
-        {
-            this.Value = value;
-
-            if (_metadata0 == null)
-            {
-                throw new ArgumentNullException(nameof(_metadata0));
-            }
-
-            _metadata0.Ratings.Add(this);
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="value"></param>
-        /// <param name="_metadata0"></param>
-        public static Rating Create(double value, Metadata _metadata0)
-        {
-            return new Rating(value, _metadata0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Value.
-        /// </summary>
-        protected double _Value;
-        /// <summary>
-        /// When provided in a partial class, allows value of Value to be changed before setting.
-        /// </summary>
-        partial void SetValue(double oldValue, ref double newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Value to be changed before returning.
-        /// </summary>
-        partial void GetValue(ref double result);
-
-        /// <summary>
-        /// Required.
-        /// </summary>
-        [Required]
-        public double Value
-        {
-            get
-            {
-                double value = _Value;
-                GetValue(ref value);
-                return _Value = value;
-            }
-
-            set
-            {
-                double oldValue = _Value;
-                SetValue(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Value = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Votes.
-        /// </summary>
-        protected int? _Votes;
-        /// <summary>
-        /// When provided in a partial class, allows value of Votes to be changed before setting.
-        /// </summary>
-        partial void SetVotes(int? oldValue, ref int? newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Votes to be changed before returning.
-        /// </summary>
-        partial void GetVotes(ref int? result);
-
-        public int? Votes
-        {
-            get
-            {
-                int? value = _Votes;
-                GetVotes(ref value);
-                return _Votes = value;
-            }
-
-            set
-            {
-                int? oldValue = _Votes;
-                SetVotes(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Votes = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-
-        /// <summary>
-        /// If this is NULL it&apos;s the internal user rating.
-        /// </summary>
-        [ForeignKey("RatingSource_RatingType_Id")]
-        public virtual RatingSource RatingType { get; set; }
-    }
-}
-

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

@@ -1,239 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    /// <summary>
-    /// This is the entity to store review ratings, not age ratings.
-    /// </summary>
-    public partial class RatingSource
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected RatingSource()
-        {
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static RatingSource CreateRatingSourceUnsafe()
-        {
-            return new RatingSource();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="maximumvalue"></param>
-        /// <param name="minimumvalue"></param>
-        /// <param name="_rating0"></param>
-        public RatingSource(double maximumvalue, double minimumvalue, Rating _rating0)
-        {
-            this.MaximumValue = maximumvalue;
-
-            this.MinimumValue = minimumvalue;
-
-            if (_rating0 == null)
-            {
-                throw new ArgumentNullException(nameof(_rating0));
-            }
-
-            _rating0.RatingType = this;
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="maximumvalue"></param>
-        /// <param name="minimumvalue"></param>
-        /// <param name="_rating0"></param>
-        public static RatingSource Create(double maximumvalue, double minimumvalue, Rating _rating0)
-        {
-            return new RatingSource(maximumvalue, minimumvalue, _rating0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Name.
-        /// </summary>
-        protected string _Name;
-        /// <summary>
-        /// When provided in a partial class, allows value of Name to be changed before setting.
-        /// </summary>
-        partial void SetName(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Name to be changed before returning.
-        /// </summary>
-        partial void GetName(ref string result);
-
-        /// <summary>
-        /// Max length = 1024
-        /// </summary>
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string Name
-        {
-            get
-            {
-                string value = _Name;
-                GetName(ref value);
-                return _Name = value;
-            }
-
-            set
-            {
-                string oldValue = _Name;
-                SetName(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Name = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for MaximumValue.
-        /// </summary>
-        protected double _MaximumValue;
-        /// <summary>
-        /// When provided in a partial class, allows value of MaximumValue to be changed before setting.
-        /// </summary>
-        partial void SetMaximumValue(double oldValue, ref double newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of MaximumValue to be changed before returning.
-        /// </summary>
-        partial void GetMaximumValue(ref double result);
-
-        /// <summary>
-        /// Required.
-        /// </summary>
-        [Required]
-        public double MaximumValue
-        {
-            get
-            {
-                double value = _MaximumValue;
-                GetMaximumValue(ref value);
-                return _MaximumValue = value;
-            }
-
-            set
-            {
-                double oldValue = _MaximumValue;
-                SetMaximumValue(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _MaximumValue = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for MinimumValue.
-        /// </summary>
-        protected double _MinimumValue;
-        /// <summary>
-        /// When provided in a partial class, allows value of MinimumValue to be changed before setting.
-        /// </summary>
-        partial void SetMinimumValue(double oldValue, ref double newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of MinimumValue to be changed before returning.
-        /// </summary>
-        partial void GetMinimumValue(ref double result);
-
-        /// <summary>
-        /// Required.
-        /// </summary>
-        [Required]
-        public double MinimumValue
-        {
-            get
-            {
-                double value = _MinimumValue;
-                GetMinimumValue(ref value);
-                return _MinimumValue = value;
-            }
-
-            set
-            {
-                double oldValue = _MinimumValue;
-                SetMinimumValue(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _MinimumValue = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-        [ForeignKey("MetadataProviderId_Source_Id")]
-        public virtual MetadataProviderId Source { get; set; }
-    }
-}
-

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

@@ -1,219 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class Release
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected Release()
-        {
-            MediaFiles = new HashSet<MediaFile>();
-            Chapters = new HashSet<Chapter>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static Release CreateReleaseUnsafe()
-        {
-            return new Release();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="name"></param>
-        /// <param name="_movie0"></param>
-        /// <param name="_episode1"></param>
-        /// <param name="_track2"></param>
-        /// <param name="_customitem3"></param>
-        /// <param name="_book4"></param>
-        /// <param name="_photo5"></param>
-        public Release(string name, Movie _movie0, Episode _episode1, Track _track2, CustomItem _customitem3, Book _book4, Photo _photo5)
-        {
-            if (string.IsNullOrEmpty(name))
-            {
-                throw new ArgumentNullException(nameof(name));
-            }
-
-            this.Name = name;
-
-            if (_movie0 == null)
-            {
-                throw new ArgumentNullException(nameof(_movie0));
-            }
-
-            _movie0.Releases.Add(this);
-
-            if (_episode1 == null)
-            {
-                throw new ArgumentNullException(nameof(_episode1));
-            }
-
-            _episode1.Releases.Add(this);
-
-            if (_track2 == null)
-            {
-                throw new ArgumentNullException(nameof(_track2));
-            }
-
-            _track2.Releases.Add(this);
-
-            if (_customitem3 == null)
-            {
-                throw new ArgumentNullException(nameof(_customitem3));
-            }
-
-            _customitem3.Releases.Add(this);
-
-            if (_book4 == null)
-            {
-                throw new ArgumentNullException(nameof(_book4));
-            }
-
-            _book4.Releases.Add(this);
-
-            if (_photo5 == null)
-            {
-                throw new ArgumentNullException(nameof(_photo5));
-            }
-
-            _photo5.Releases.Add(this);
-
-            this.MediaFiles = new HashSet<MediaFile>();
-            this.Chapters = new HashSet<Chapter>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="name"></param>
-        /// <param name="_movie0"></param>
-        /// <param name="_episode1"></param>
-        /// <param name="_track2"></param>
-        /// <param name="_customitem3"></param>
-        /// <param name="_book4"></param>
-        /// <param name="_photo5"></param>
-        public static Release Create(string name, Movie _movie0, Episode _episode1, Track _track2, CustomItem _customitem3, Book _book4, Photo _photo5)
-        {
-            return new Release(name, _movie0, _episode1, _track2, _customitem3, _book4, _photo5);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Id.
-        /// </summary>
-        internal int _Id;
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before setting.
-        /// </summary>
-        partial void SetId(int oldValue, ref int newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Id to be changed before returning.
-        /// </summary>
-        partial void GetId(ref int result);
-
-        /// <summary>
-        /// Identity, Indexed, Required.
-        /// </summary>
-        [Key]
-        [Required]
-        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public int Id
-        {
-            get
-            {
-                int value = _Id;
-                GetId(ref value);
-                return _Id = value;
-            }
-
-            protected set
-            {
-                int oldValue = _Id;
-                SetId(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Id = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Name.
-        /// </summary>
-        protected string _Name;
-        /// <summary>
-        /// When provided in a partial class, allows value of Name to be changed before setting.
-        /// </summary>
-        partial void SetName(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Name to be changed before returning.
-        /// </summary>
-        partial void GetName(ref string result);
-
-        /// <summary>
-        /// Required, Max length = 1024
-        /// </summary>
-        [Required]
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string Name
-        {
-            get
-            {
-                string value = _Name;
-                GetName(ref value);
-                return _Name = value;
-            }
-
-            set
-            {
-                string oldValue = _Name;
-                SetName(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Name = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Required, ConcurrenyToken.
-        /// </summary>
-        [ConcurrencyCheck]
-        [Required]
-        public uint RowVersion { get; set; }
-
-        public void OnSavingChanges()
-        {
-            RowVersion++;
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-        [ForeignKey("MediaFile_MediaFiles_Id")]
-        public virtual ICollection<MediaFile> MediaFiles { get; protected set; }
-
-        [ForeignKey("Chapter_Chapters_Id")]
-        public virtual ICollection<Chapter> Chapters { get; protected set; }
-    }
-}
-

+ 0 - 119
Jellyfin.Data/Entities/Season.cs

@@ -1,119 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class Season : LibraryItem
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        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.
-
-            SeasonMetadata = new HashSet<SeasonMetadata>();
-            Episodes = new HashSet<Episode>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static Season CreateSeasonUnsafe()
-        {
-            return new Season();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="_series0"></param>
-        public Season(Guid urlid, DateTime dateadded, Series _series0)
-        {
-            // 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.
-
-            this.UrlId = urlid;
-
-            if (_series0 == null)
-            {
-                throw new ArgumentNullException(nameof(_series0));
-            }
-
-            _series0.Seasons.Add(this);
-
-            this.SeasonMetadata = new HashSet<SeasonMetadata>();
-            this.Episodes = new HashSet<Episode>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="_series0"></param>
-        public static Season Create(Guid urlid, DateTime dateadded, Series _series0)
-        {
-            return new Season(urlid, dateadded, _series0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for SeasonNumber.
-        /// </summary>
-        protected int? _SeasonNumber;
-        /// <summary>
-        /// When provided in a partial class, allows value of SeasonNumber to be changed before setting.
-        /// </summary>
-        partial void SetSeasonNumber(int? oldValue, ref int? newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of SeasonNumber to be changed before returning.
-        /// </summary>
-        partial void GetSeasonNumber(ref int? result);
-
-        public int? SeasonNumber
-        {
-            get
-            {
-                int? value = _SeasonNumber;
-                GetSeasonNumber(ref value);
-                return _SeasonNumber = value;
-            }
-
-            set
-            {
-                int? oldValue = _SeasonNumber;
-                SetSeasonNumber(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _SeasonNumber = value;
-                }
-            }
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-        [ForeignKey("SeasonMetadata_SeasonMetadata_Id")]
-        public virtual ICollection<SeasonMetadata> SeasonMetadata { get; protected set; }
-
-        [ForeignKey("Episode_Episodes_Id")]
-        public virtual ICollection<Episode> Episodes { get; protected set; }
-    }
-}
-

+ 0 - 123
Jellyfin.Data/Entities/SeasonMetadata.cs

@@ -1,123 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class SeasonMetadata : Metadata
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected SeasonMetadata()
-        {
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static SeasonMetadata CreateSeasonMetadataUnsafe()
-        {
-            return new SeasonMetadata();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_season0"></param>
-        public SeasonMetadata(string title, string language, DateTime dateadded, DateTime datemodified, Season _season0)
-        {
-            if (string.IsNullOrEmpty(title))
-            {
-                throw new ArgumentNullException(nameof(title));
-            }
-
-            this.Title = title;
-
-            if (string.IsNullOrEmpty(language))
-            {
-                throw new ArgumentNullException(nameof(language));
-            }
-
-            this.Language = language;
-
-            if (_season0 == null)
-            {
-                throw new ArgumentNullException(nameof(_season0));
-            }
-
-            _season0.SeasonMetadata.Add(this);
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_season0"></param>
-        public static SeasonMetadata Create(string title, string language, DateTime dateadded, DateTime datemodified, Season _season0)
-        {
-            return new SeasonMetadata(title, language, dateadded, datemodified, _season0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Outline.
-        /// </summary>
-        protected string _Outline;
-        /// <summary>
-        /// When provided in a partial class, allows value of Outline to be changed before setting.
-        /// </summary>
-        partial void SetOutline(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Outline to be changed before returning.
-        /// </summary>
-        partial void GetOutline(ref string result);
-
-        /// <summary>
-        /// Max length = 1024
-        /// </summary>
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string Outline
-        {
-            get
-            {
-                string value = _Outline;
-                GetOutline(ref value);
-                return _Outline = value;
-            }
-
-            set
-            {
-                string oldValue = _Outline;
-                SetOutline(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Outline = value;
-                }
-            }
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-    }
-}
-

+ 0 - 165
Jellyfin.Data/Entities/Series.cs

@@ -1,165 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class Series : LibraryItem
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected Series()
-        {
-            SeriesMetadata = new HashSet<SeriesMetadata>();
-            Seasons = new HashSet<Season>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        public Series(Guid urlid, DateTime dateadded)
-        {
-            this.UrlId = urlid;
-
-            this.SeriesMetadata = new HashSet<SeriesMetadata>();
-            this.Seasons = new HashSet<Season>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        public static Series Create(Guid urlid, DateTime dateadded)
-        {
-            return new Series(urlid, dateadded);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for AirsDayOfWeek.
-        /// </summary>
-        protected DayOfWeek? _AirsDayOfWeek;
-        /// <summary>
-        /// When provided in a partial class, allows value of AirsDayOfWeek to be changed before setting.
-        /// </summary>
-        partial void SetAirsDayOfWeek(DayOfWeek? oldValue, ref DayOfWeek? newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of AirsDayOfWeek to be changed before returning.
-        /// </summary>
-        partial void GetAirsDayOfWeek(ref DayOfWeek? result);
-
-        public DayOfWeek? AirsDayOfWeek
-        {
-            get
-            {
-                DayOfWeek? value = _AirsDayOfWeek;
-                GetAirsDayOfWeek(ref value);
-                return _AirsDayOfWeek = value;
-            }
-
-            set
-            {
-                DayOfWeek? oldValue = _AirsDayOfWeek;
-                SetAirsDayOfWeek(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _AirsDayOfWeek = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for AirsTime.
-        /// </summary>
-        protected DateTimeOffset? _AirsTime;
-        /// <summary>
-        /// When provided in a partial class, allows value of AirsTime to be changed before setting.
-        /// </summary>
-        partial void SetAirsTime(DateTimeOffset? oldValue, ref DateTimeOffset? newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of AirsTime to be changed before returning.
-        /// </summary>
-        partial void GetAirsTime(ref DateTimeOffset? result);
-
-        /// <summary>
-        /// The time the show airs, ignore the date portion.
-        /// </summary>
-        public DateTimeOffset? AirsTime
-        {
-            get
-            {
-                DateTimeOffset? value = _AirsTime;
-                GetAirsTime(ref value);
-                return _AirsTime = value;
-            }
-
-            set
-            {
-                DateTimeOffset? oldValue = _AirsTime;
-                SetAirsTime(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _AirsTime = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for FirstAired.
-        /// </summary>
-        protected DateTimeOffset? _FirstAired;
-        /// <summary>
-        /// When provided in a partial class, allows value of FirstAired to be changed before setting.
-        /// </summary>
-        partial void SetFirstAired(DateTimeOffset? oldValue, ref DateTimeOffset? newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of FirstAired to be changed before returning.
-        /// </summary>
-        partial void GetFirstAired(ref DateTimeOffset? result);
-
-        public DateTimeOffset? FirstAired
-        {
-            get
-            {
-                DateTimeOffset? value = _FirstAired;
-                GetFirstAired(ref value);
-                return _FirstAired = value;
-            }
-
-            set
-            {
-                DateTimeOffset? oldValue = _FirstAired;
-                SetFirstAired(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _FirstAired = value;
-                }
-            }
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-        [ForeignKey("SeriesMetadata_SeriesMetadata_Id")]
-        public virtual ICollection<SeriesMetadata> SeriesMetadata { get; protected set; }
-
-        [ForeignKey("Season_Seasons_Id")]
-        public virtual ICollection<Season> Seasons { get; protected set; }
-    }
-}
-

+ 0 - 244
Jellyfin.Data/Entities/SeriesMetadata.cs

@@ -1,244 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class SeriesMetadata : Metadata
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected SeriesMetadata()
-        {
-            Networks = new HashSet<Company>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static SeriesMetadata CreateSeriesMetadataUnsafe()
-        {
-            return new SeriesMetadata();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_series0"></param>
-        public SeriesMetadata(string title, string language, DateTime dateadded, DateTime datemodified, Series _series0)
-        {
-            if (string.IsNullOrEmpty(title))
-            {
-                throw new ArgumentNullException(nameof(title));
-            }
-
-            this.Title = title;
-
-            if (string.IsNullOrEmpty(language))
-            {
-                throw new ArgumentNullException(nameof(language));
-            }
-
-            this.Language = language;
-
-            if (_series0 == null)
-            {
-                throw new ArgumentNullException(nameof(_series0));
-            }
-
-            _series0.SeriesMetadata.Add(this);
-
-            this.Networks = new HashSet<Company>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_series0"></param>
-        public static SeriesMetadata Create(string title, string language, DateTime dateadded, DateTime datemodified, Series _series0)
-        {
-            return new SeriesMetadata(title, language, dateadded, datemodified, _series0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for Outline.
-        /// </summary>
-        protected string _Outline;
-        /// <summary>
-        /// When provided in a partial class, allows value of Outline to be changed before setting.
-        /// </summary>
-        partial void SetOutline(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Outline to be changed before returning.
-        /// </summary>
-        partial void GetOutline(ref string result);
-
-        /// <summary>
-        /// Max length = 1024
-        /// </summary>
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string Outline
-        {
-            get
-            {
-                string value = _Outline;
-                GetOutline(ref value);
-                return _Outline = value;
-            }
-
-            set
-            {
-                string oldValue = _Outline;
-                SetOutline(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Outline = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Plot.
-        /// </summary>
-        protected string _Plot;
-        /// <summary>
-        /// When provided in a partial class, allows value of Plot to be changed before setting.
-        /// </summary>
-        partial void SetPlot(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Plot to be changed before returning.
-        /// </summary>
-        partial void GetPlot(ref string result);
-
-        /// <summary>
-        /// Max length = 65535
-        /// </summary>
-        [MaxLength(65535)]
-        [StringLength(65535)]
-        public string Plot
-        {
-            get
-            {
-                string value = _Plot;
-                GetPlot(ref value);
-                return _Plot = value;
-            }
-
-            set
-            {
-                string oldValue = _Plot;
-                SetPlot(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Plot = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Tagline.
-        /// </summary>
-        protected string _Tagline;
-        /// <summary>
-        /// When provided in a partial class, allows value of Tagline to be changed before setting.
-        /// </summary>
-        partial void SetTagline(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Tagline to be changed before returning.
-        /// </summary>
-        partial void GetTagline(ref string result);
-
-        /// <summary>
-        /// Max length = 1024
-        /// </summary>
-        [MaxLength(1024)]
-        [StringLength(1024)]
-        public string Tagline
-        {
-            get
-            {
-                string value = _Tagline;
-                GetTagline(ref value);
-                return _Tagline = value;
-            }
-
-            set
-            {
-                string oldValue = _Tagline;
-                SetTagline(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Tagline = value;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Backing field for Country.
-        /// </summary>
-        protected string _Country;
-        /// <summary>
-        /// When provided in a partial class, allows value of Country to be changed before setting.
-        /// </summary>
-        partial void SetCountry(string oldValue, ref string newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of Country to be changed before returning.
-        /// </summary>
-        partial void GetCountry(ref string result);
-
-        /// <summary>
-        /// Max length = 2
-        /// </summary>
-        [MaxLength(2)]
-        [StringLength(2)]
-        public string Country
-        {
-            get
-            {
-                string value = _Country;
-                GetCountry(ref value);
-                return _Country = value;
-            }
-
-            set
-            {
-                string oldValue = _Country;
-                SetCountry(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _Country = value;
-                }
-            }
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-        [ForeignKey("Company_Networks_Id")]
-        public virtual ICollection<Company> Networks { get; protected set; }
-    }
-}
-

+ 0 - 120
Jellyfin.Data/Entities/Track.cs

@@ -1,120 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class Track : LibraryItem
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        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.
-
-            Releases = new HashSet<Release>();
-            TrackMetadata = new HashSet<TrackMetadata>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static Track CreateTrackUnsafe()
-        {
-            return new Track();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="_musicalbum0"></param>
-        public Track(Guid urlid, DateTime dateadded, MusicAlbum _musicalbum0)
-        {
-            // 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.
-
-            this.UrlId = urlid;
-
-            if (_musicalbum0 == null)
-            {
-                throw new ArgumentNullException(nameof(_musicalbum0));
-            }
-
-            _musicalbum0.Tracks.Add(this);
-
-            this.Releases = new HashSet<Release>();
-            this.TrackMetadata = new HashSet<TrackMetadata>();
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="_musicalbum0"></param>
-        public static Track Create(Guid urlid, DateTime dateadded, MusicAlbum _musicalbum0)
-        {
-            return new Track(urlid, dateadded, _musicalbum0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /// <summary>
-        /// Backing field for TrackNumber.
-        /// </summary>
-        protected int? _TrackNumber;
-        /// <summary>
-        /// When provided in a partial class, allows value of TrackNumber to be changed before setting.
-        /// </summary>
-        partial void SetTrackNumber(int? oldValue, ref int? newValue);
-        /// <summary>
-        /// When provided in a partial class, allows value of TrackNumber to be changed before returning.
-        /// </summary>
-        partial void GetTrackNumber(ref int? result);
-
-        public int? TrackNumber
-        {
-            get
-            {
-                int? value = _TrackNumber;
-                GetTrackNumber(ref value);
-                return _TrackNumber = value;
-            }
-
-            set
-            {
-                int? oldValue = _TrackNumber;
-                SetTrackNumber(oldValue, ref value);
-                if (oldValue != value)
-                {
-                    _TrackNumber = value;
-                }
-            }
-        }
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-
-        [ForeignKey("Release_Releases_Id")]
-        public virtual ICollection<Release> Releases { get; protected set; }
-
-        [ForeignKey("TrackMetadata_TrackMetadata_Id")]
-        public virtual ICollection<TrackMetadata> TrackMetadata { get; protected set; }
-    }
-}
-

+ 0 - 83
Jellyfin.Data/Entities/TrackMetadata.cs

@@ -1,83 +0,0 @@
-#pragma warning disable CS1591
-
-using System;
-
-namespace Jellyfin.Data.Entities
-{
-    public partial class TrackMetadata : Metadata
-    {
-        partial void Init();
-
-        /// <summary>
-        /// Default constructor. Protected due to required properties, but present because EF needs it.
-        /// </summary>
-        protected TrackMetadata()
-        {
-            Init();
-        }
-
-        /// <summary>
-        /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
-        /// </summary>
-        public static TrackMetadata CreateTrackMetadataUnsafe()
-        {
-            return new TrackMetadata();
-        }
-
-        /// <summary>
-        /// Public constructor with required data.
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_track0"></param>
-        public TrackMetadata(string title, string language, DateTime dateadded, DateTime datemodified, Track _track0)
-        {
-            if (string.IsNullOrEmpty(title))
-            {
-                throw new ArgumentNullException(nameof(title));
-            }
-
-            this.Title = title;
-
-            if (string.IsNullOrEmpty(language))
-            {
-                throw new ArgumentNullException(nameof(language));
-            }
-
-            this.Language = language;
-
-            if (_track0 == null)
-            {
-                throw new ArgumentNullException(nameof(_track0));
-            }
-
-            _track0.TrackMetadata.Add(this);
-
-            Init();
-        }
-
-        /// <summary>
-        /// Static create function (for use in LINQ queries, etc.)
-        /// </summary>
-        /// <param name="title">The title or name of the object.</param>
-        /// <param name="language">ISO-639-3 3-character language codes.</param>
-        /// <param name="dateadded">The date the object was added.</param>
-        /// <param name="datemodified">The date the object was last modified.</param>
-        /// <param name="_track0"></param>
-        public static TrackMetadata Create(string title, string language, DateTime dateadded, DateTime datemodified, Track _track0)
-        {
-            return new TrackMetadata(title, language, dateadded, datemodified, _track0);
-        }
-
-        /*************************************************************************
-         * Properties
-         *************************************************************************/
-
-        /*************************************************************************
-         * Navigation properties
-         *************************************************************************/
-    }
-}
-

+ 2 - 1
Jellyfin.Data/Entities/User.cs

@@ -8,13 +8,14 @@ using System.Globalization;
 using System.Linq;
 using System.Text.Json.Serialization;
 using Jellyfin.Data.Enums;
+using Jellyfin.Data.Interfaces;
 
 namespace Jellyfin.Data.Entities
 {
     /// <summary>
     /// An entity representing a user.
     /// </summary>
-    public partial class User : IHasPermissions, ISavingChanges
+    public partial class User : IHasPermissions, IHasConcurrencyToken
     {
         /// <summary>
         /// The values being delimited here are Guids, so commas work as they do not appear in Guids.

+ 0 - 9
Jellyfin.Data/ISavingChanges.cs

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

+ 16 - 0
Jellyfin.Data/Interfaces/IHasArtwork.cs

@@ -0,0 +1,16 @@
+using System.Collections.Generic;
+using Jellyfin.Data.Entities.Libraries;
+
+namespace Jellyfin.Data.Interfaces
+{
+    /// <summary>
+    /// An interface abstracting an entity that has artwork.
+    /// </summary>
+    public interface IHasArtwork
+    {
+        /// <summary>
+        /// Gets a collection containing this entity's artwork.
+        /// </summary>
+        ICollection<Artwork> Artwork { get; }
+    }
+}

+ 16 - 0
Jellyfin.Data/Interfaces/IHasCompanies.cs

@@ -0,0 +1,16 @@
+using System.Collections.Generic;
+using Jellyfin.Data.Entities.Libraries;
+
+namespace Jellyfin.Data.Interfaces
+{
+    /// <summary>
+    /// An abstraction representing an entity that has companies.
+    /// </summary>
+    public interface IHasCompanies
+    {
+        /// <summary>
+        /// Gets a collection containing this entity's companies.
+        /// </summary>
+        ICollection<Company> Companies { get; }
+    }
+}

+ 18 - 0
Jellyfin.Data/Interfaces/IHasConcurrencyToken.cs

@@ -0,0 +1,18 @@
+namespace Jellyfin.Data.Interfaces
+{
+    /// <summary>
+    /// An interface abstracting an entity that has a concurrency token.
+    /// </summary>
+    public interface IHasConcurrencyToken
+    {
+        /// <summary>
+        /// Gets the version of this row. Acts as a concurrency token.
+        /// </summary>
+        uint RowVersion { get; }
+
+        /// <summary>
+        /// Called when saving changes to this entity.
+        /// </summary>
+        void OnSavingChanges();
+    }
+}

+ 0 - 0
Jellyfin.Data/IHasPermissions.cs → Jellyfin.Data/Interfaces/IHasPermissions.cs


+ 16 - 0
Jellyfin.Data/Interfaces/IHasReleases.cs

@@ -0,0 +1,16 @@
+using System.Collections.Generic;
+using Jellyfin.Data.Entities.Libraries;
+
+namespace Jellyfin.Data.Interfaces
+{
+    /// <summary>
+    /// An abstraction representing an entity that has releases.
+    /// </summary>
+    public interface IHasReleases
+    {
+        /// <summary>
+        /// Gets a collection containing this entity's releases.
+        /// </summary>
+        ICollection<Release> Releases { get; }
+    }
+}

+ 2 - 2
Jellyfin.Server.Implementations/JellyfinDb.cs

@@ -2,8 +2,8 @@
 
 using System;
 using System.Linq;
-using Jellyfin.Data;
 using Jellyfin.Data.Entities;
+using Jellyfin.Data.Interfaces;
 using Microsoft.EntityFrameworkCore;
 
 namespace Jellyfin.Server.Implementations
@@ -130,7 +130,7 @@ namespace Jellyfin.Server.Implementations
             foreach (var saveEntity in ChangeTracker.Entries()
                 .Where(e => e.State == EntityState.Modified)
                 .Select(entry => entry.Entity)
-                .OfType<ISavingChanges>())
+                .OfType<IHasConcurrencyToken>())
             {
                 saveEntity.OnSavingChanges();
             }