< Summary - Jellyfin

Information
Class: Jellyfin.Database.Implementations.JellyfinDbContext
Assembly: Jellyfin.Database.Implementations
File(s): /srv/git/jellyfin/src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinDbContext.cs
Line coverage
78%
Covered lines: 37
Uncovered lines: 10
Coverable lines: 47
Total lines: 287
Line coverage: 78.7%
Branch coverage
50%
Covered branches: 1
Total branches: 2
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

File(s)

/srv/git/jellyfin/src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinDbContext.cs

#LineLine coverage
 1using System;
 2using System.Linq;
 3using Jellyfin.Database.Implementations.Entities;
 4using Jellyfin.Database.Implementations.Entities.Security;
 5using Jellyfin.Database.Implementations.Interfaces;
 6using Microsoft.EntityFrameworkCore;
 7using Microsoft.Extensions.Logging;
 8
 9namespace Jellyfin.Database.Implementations;
 10
 11/// <inheritdoc/>
 12/// <summary>
 13/// Initializes a new instance of the <see cref="JellyfinDbContext"/> class.
 14/// </summary>
 15/// <param name="options">The database context options.</param>
 16/// <param name="logger">Logger.</param>
 17/// <param name="jellyfinDatabaseProvider">The provider for the database engine specific operations.</param>
 3718public class JellyfinDbContext(DbContextOptions<JellyfinDbContext> options, ILogger<JellyfinDbContext> logger, IJellyfin
 19{
 20    /// <summary>
 21    /// Gets the <see cref="DbSet{TEntity}"/> containing the access schedules.
 22    /// </summary>
 023    public DbSet<AccessSchedule> AccessSchedules => Set<AccessSchedule>();
 24
 25    /// <summary>
 26    /// Gets the <see cref="DbSet{TEntity}"/> containing the activity logs.
 27    /// </summary>
 3528    public DbSet<ActivityLog> ActivityLogs => Set<ActivityLog>();
 29
 30    /// <summary>
 31    /// Gets the <see cref="DbSet{TEntity}"/> containing the API keys.
 32    /// </summary>
 033    public DbSet<ApiKey> ApiKeys => Set<ApiKey>();
 34
 35    /// <summary>
 36    /// Gets the <see cref="DbSet{TEntity}"/> containing the devices.
 37    /// </summary>
 3638    public DbSet<Device> Devices => Set<Device>();
 39
 40    /// <summary>
 41    /// Gets the <see cref="DbSet{TEntity}"/> containing the device options.
 42    /// </summary>
 2143    public DbSet<DeviceOptions> DeviceOptions => Set<DeviceOptions>();
 44
 45    /// <summary>
 46    /// Gets the <see cref="DbSet{TEntity}"/> containing the display preferences.
 47    /// </summary>
 048    public DbSet<DisplayPreferences> DisplayPreferences => Set<DisplayPreferences>();
 49
 50    /// <summary>
 51    /// Gets the <see cref="DbSet{TEntity}"/> containing the image infos.
 52    /// </summary>
 053    public DbSet<ImageInfo> ImageInfos => Set<ImageInfo>();
 54
 55    /// <summary>
 56    /// Gets the <see cref="DbSet{TEntity}"/> containing the item display preferences.
 57    /// </summary>
 258    public DbSet<ItemDisplayPreferences> ItemDisplayPreferences => Set<ItemDisplayPreferences>();
 59
 60    /// <summary>
 61    /// Gets the <see cref="DbSet{TEntity}"/> containing the custom item display preferences.
 62    /// </summary>
 263    public DbSet<CustomItemDisplayPreferences> CustomItemDisplayPreferences => Set<CustomItemDisplayPreferences>();
 64
 65    /// <summary>
 66    /// Gets the <see cref="DbSet{TEntity}"/> containing the permissions.
 67    /// </summary>
 068    public DbSet<Permission> Permissions => Set<Permission>();
 69
 70    /// <summary>
 71    /// Gets the <see cref="DbSet{TEntity}"/> containing the preferences.
 72    /// </summary>
 073    public DbSet<Preference> Preferences => Set<Preference>();
 74
 75    /// <summary>
 76    /// Gets the <see cref="DbSet{TEntity}"/> containing the users.
 77    /// </summary>
 7578    public DbSet<User> Users => Set<User>();
 79
 80    /// <summary>
 81    /// Gets the <see cref="DbSet{TEntity}"/> containing the trickplay metadata.
 82    /// </summary>
 283    public DbSet<TrickplayInfo> TrickplayInfos => Set<TrickplayInfo>();
 84
 85    /// <summary>
 86    /// Gets the <see cref="DbSet{TEntity}"/> containing the media segments.
 87    /// </summary>
 288    public DbSet<MediaSegment> MediaSegments => Set<MediaSegment>();
 89
 90    /// <summary>
 91    /// Gets the <see cref="DbSet{TEntity}"/> containing the user data.
 92    /// </summary>
 293    public DbSet<UserData> UserData => Set<UserData>();
 94
 95    /// <summary>
 96    /// Gets the <see cref="DbSet{TEntity}"/> containing the user data.
 97    /// </summary>
 8898    public DbSet<AncestorId> AncestorIds => Set<AncestorId>();
 99
 100    /// <summary>
 101    /// Gets the <see cref="DbSet{TEntity}"/> containing the user data.
 102    /// </summary>
 2103    public DbSet<AttachmentStreamInfo> AttachmentStreamInfos => Set<AttachmentStreamInfo>();
 104
 105    /// <summary>
 106    /// Gets the <see cref="DbSet{TEntity}"/> containing the user data.
 107    /// </summary>
 673108    public DbSet<BaseItemEntity> BaseItems => Set<BaseItemEntity>();
 109
 110    /// <summary>
 111    /// Gets the <see cref="DbSet{TEntity}"/> containing the user data.
 112    /// </summary>
 2113    public DbSet<Chapter> Chapters => Set<Chapter>();
 114
 115    /// <summary>
 116    /// Gets the <see cref="DbSet{TEntity}"/>.
 117    /// </summary>
 46118    public DbSet<ItemValue> ItemValues => Set<ItemValue>();
 119
 120    /// <summary>
 121    /// Gets the <see cref="DbSet{TEntity}"/>.
 122    /// </summary>
 137123    public DbSet<ItemValueMap> ItemValuesMap => Set<ItemValueMap>();
 124
 125    /// <summary>
 126    /// Gets the <see cref="DbSet{TEntity}"/>.
 127    /// </summary>
 2128    public DbSet<MediaStreamInfo> MediaStreamInfos => Set<MediaStreamInfo>();
 129
 130    /// <summary>
 131    /// Gets the <see cref="DbSet{TEntity}"/>.
 132    /// </summary>
 2133    public DbSet<People> Peoples => Set<People>();
 134
 135    /// <summary>
 136    /// Gets the <see cref="DbSet{TEntity}"/>.
 137    /// </summary>
 2138    public DbSet<PeopleBaseItemMap> PeopleBaseItemMap => Set<PeopleBaseItemMap>();
 139
 140    /// <summary>
 141    /// Gets the <see cref="DbSet{TEntity}"/> containing the referenced Providers with ids.
 142    /// </summary>
 32143    public DbSet<BaseItemProvider> BaseItemProviders => Set<BaseItemProvider>();
 144
 145    /// <summary>
 146    /// Gets the <see cref="DbSet{TEntity}"/>.
 147    /// </summary>
 2148    public DbSet<BaseItemImageInfo> BaseItemImageInfos => Set<BaseItemImageInfo>();
 149
 150    /// <summary>
 151    /// Gets the <see cref="DbSet{TEntity}"/>.
 152    /// </summary>
 2153    public DbSet<BaseItemMetadataField> BaseItemMetadataFields => Set<BaseItemMetadataField>();
 154
 155    /// <summary>
 156    /// Gets the <see cref="DbSet{TEntity}"/>.
 157    /// </summary>
 2158    public DbSet<BaseItemTrailerType> BaseItemTrailerTypes => Set<BaseItemTrailerType>();
 159
 160    /// <summary>
 161    /// Gets the <see cref="DbSet{TEntity}"/>.
 162    /// </summary>
 2163    public DbSet<KeyframeData> KeyframeData => Set<KeyframeData>();
 164
 165    /*public DbSet<Artwork> Artwork => Set<Artwork>();
 166
 167    public DbSet<Book> Books => Set<Book>();
 168
 169    public DbSet<BookMetadata> BookMetadata => Set<BookMetadata>();
 170
 171    public DbSet<Chapter> Chapters => Set<Chapter>();
 172
 173    public DbSet<Collection> Collections => Set<Collection>();
 174
 175    public DbSet<CollectionItem> CollectionItems => Set<CollectionItem>();
 176
 177    public DbSet<Company> Companies => Set<Company>();
 178
 179    public DbSet<CompanyMetadata> CompanyMetadata => Set<CompanyMetadata>();
 180
 181    public DbSet<CustomItem> CustomItems => Set<CustomItem>();
 182
 183    public DbSet<CustomItemMetadata> CustomItemMetadata => Set<CustomItemMetadata>();
 184
 185    public DbSet<Episode> Episodes => Set<Episode>();
 186
 187    public DbSet<EpisodeMetadata> EpisodeMetadata => Set<EpisodeMetadata>();
 188
 189    public DbSet<Genre> Genres => Set<Genre>();
 190
 191    public DbSet<Group> Groups => Set<Groups>();
 192
 193    public DbSet<Library> Libraries => Set<Library>();
 194
 195    public DbSet<LibraryItem> LibraryItems => Set<LibraryItems>();
 196
 197    public DbSet<LibraryRoot> LibraryRoot => Set<LibraryRoot>();
 198
 199    public DbSet<MediaFile> MediaFiles => Set<MediaFiles>();
 200
 201    public DbSet<MediaFileStream> MediaFileStream => Set<MediaFileStream>();
 202
 203    public DbSet<Metadata> Metadata => Set<Metadata>();
 204
 205    public DbSet<MetadataProvider> MetadataProviders => Set<MetadataProvider>();
 206
 207    public DbSet<MetadataProviderId> MetadataProviderIds => Set<MetadataProviderId>();
 208
 209    public DbSet<Movie> Movies => Set<Movie>();
 210
 211    public DbSet<MovieMetadata> MovieMetadata => Set<MovieMetadata>();
 212
 213    public DbSet<MusicAlbum> MusicAlbums => Set<MusicAlbum>();
 214
 215    public DbSet<MusicAlbumMetadata> MusicAlbumMetadata => Set<MusicAlbumMetadata>();
 216
 217    public DbSet<Person> People => Set<Person>();
 218
 219    public DbSet<PersonRole> PersonRoles => Set<PersonRole>();
 220
 221    public DbSet<Photo> Photo => Set<Photo>();
 222
 223    public DbSet<PhotoMetadata> PhotoMetadata => Set<PhotoMetadata>();
 224
 225    public DbSet<ProviderMapping> ProviderMappings => Set<ProviderMapping>();
 226
 227    public DbSet<Rating> Ratings => Set<Rating>();
 228
 229    /// <summary>
 230    /// Repository for global::Jellyfin.Data.Entities.RatingSource - This is the entity to
 231    /// store review ratings, not age ratings.
 232    /// </summary>
 233    public DbSet<RatingSource> RatingSources => Set<RatingSource>();
 234
 235    public DbSet<Release> Releases => Set<Release>();
 236
 237    public DbSet<Season> Seasons => Set<Season>();
 238
 239    public DbSet<SeasonMetadata> SeasonMetadata => Set<SeasonMetadata>();
 240
 241    public DbSet<Series> Series => Set<Series>();
 242
 243    public DbSet<SeriesMetadata> SeriesMetadata => Set<SeriesMetadata();
 244
 245    public DbSet<Track> Tracks => Set<Track>();
 246
 247    public DbSet<TrackMetadata> TrackMetadata => Set<TrackMetadata>();*/
 248
 249    /// <inheritdoc/>
 250    public override int SaveChanges()
 251    {
 186252        foreach (var saveEntity in ChangeTracker.Entries()
 93253                     .Where(e => e.State == EntityState.Modified)
 93254                     .Select(entry => entry.Entity)
 93255                     .OfType<IHasConcurrencyToken>())
 256        {
 0257            saveEntity.OnSavingChanges();
 258        }
 259
 260        try
 261        {
 93262            return base.SaveChanges();
 263        }
 0264        catch (Exception e)
 265        {
 0266            logger.LogError(e, "Error trying to save changes.");
 0267            throw;
 268        }
 93269    }
 270
 271    /// <inheritdoc />
 272    protected override void OnModelCreating(ModelBuilder modelBuilder)
 273    {
 2274        jellyfinDatabaseProvider.OnModelCreating(modelBuilder);
 2275        base.OnModelCreating(modelBuilder);
 276
 277        // Configuration for each entity is in its own class inside 'ModelConfiguration'.
 2278        modelBuilder.ApplyConfigurationsFromAssembly(typeof(JellyfinDbContext).Assembly);
 2279    }
 280
 281    /// <inheritdoc />
 282    protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
 283    {
 2284        jellyfinDatabaseProvider.ConfigureConventions(configurationBuilder);
 2285        base.ConfigureConventions(configurationBuilder);
 2286    }
 287}