mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-31 14:33:54 -04:00
Allow loading of Database options for DB provider (#14466)
This commit is contained in:
parent
e9d92bdcb0
commit
310a54f090
@ -139,7 +139,7 @@ public static class ServiceCollectionExtensions
|
|||||||
serviceCollection.AddPooledDbContextFactory<JellyfinDbContext>((serviceProvider, opt) =>
|
serviceCollection.AddPooledDbContextFactory<JellyfinDbContext>((serviceProvider, opt) =>
|
||||||
{
|
{
|
||||||
var provider = serviceProvider.GetRequiredService<IJellyfinDatabaseProvider>();
|
var provider = serviceProvider.GetRequiredService<IJellyfinDatabaseProvider>();
|
||||||
provider.Initialise(opt);
|
provider.Initialise(opt, efCoreConfiguration);
|
||||||
var lockingBehavior = serviceProvider.GetRequiredService<IEntityFrameworkCoreLockingBehavior>();
|
var lockingBehavior = serviceProvider.GetRequiredService<IEntityFrameworkCoreLockingBehavior>();
|
||||||
lockingBehavior.Initialise(opt);
|
lockingBehavior.Initialise(opt);
|
||||||
});
|
});
|
||||||
|
@ -2,6 +2,7 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Jellyfin.Database.Implementations.DbConfiguration;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace Jellyfin.Database.Implementations;
|
namespace Jellyfin.Database.Implementations;
|
||||||
@ -20,7 +21,8 @@ public interface IJellyfinDatabaseProvider
|
|||||||
/// Initialises jellyfins EFCore database access.
|
/// Initialises jellyfins EFCore database access.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="options">The EFCore database options.</param>
|
/// <param name="options">The EFCore database options.</param>
|
||||||
void Initialise(DbContextOptionsBuilder options);
|
/// <param name="databaseConfiguration">The Jellyfin database options.</param>
|
||||||
|
void Initialise(DbContextOptionsBuilder options, DatabaseConfigurationOptions databaseConfiguration);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Will be invoked when EFCore wants to build its model.
|
/// Will be invoked when EFCore wants to build its model.
|
||||||
|
@ -2,9 +2,11 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Database.Implementations;
|
using Jellyfin.Database.Implementations;
|
||||||
|
using Jellyfin.Database.Implementations.DbConfiguration;
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
using Microsoft.Data.Sqlite;
|
using Microsoft.Data.Sqlite;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
@ -38,11 +40,16 @@ public sealed class SqliteDatabaseProvider : IJellyfinDatabaseProvider
|
|||||||
public IDbContextFactory<JellyfinDbContext>? DbContextFactory { get; set; }
|
public IDbContextFactory<JellyfinDbContext>? DbContextFactory { get; set; }
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public void Initialise(DbContextOptionsBuilder options)
|
public void Initialise(DbContextOptionsBuilder options, DatabaseConfigurationOptions databaseConfiguration)
|
||||||
{
|
{
|
||||||
|
var sqliteConnectionBuilder = new SqliteConnectionStringBuilder();
|
||||||
|
sqliteConnectionBuilder.DataSource = Path.Combine(_applicationPaths.DataPath, "jellyfin.db");
|
||||||
|
sqliteConnectionBuilder.Cache = Enum.Parse<SqliteCacheMode>(databaseConfiguration.CustomProviderOptions?.Options.FirstOrDefault(e => e.Key.Equals("cache", StringComparison.OrdinalIgnoreCase))?.Value ?? nameof(SqliteCacheMode.Default));
|
||||||
|
sqliteConnectionBuilder.Pooling = (databaseConfiguration.CustomProviderOptions?.Options.FirstOrDefault(e => e.Key.Equals("pooling", StringComparison.OrdinalIgnoreCase))?.Value ?? bool.FalseString).Equals(bool.TrueString, StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
options
|
options
|
||||||
.UseSqlite(
|
.UseSqlite(
|
||||||
$"Filename={Path.Combine(_applicationPaths.DataPath, "jellyfin.db")};Pooling=false",
|
sqliteConnectionBuilder.ToString(),
|
||||||
sqLiteOptions => sqLiteOptions.MigrationsAssembly(GetType().Assembly))
|
sqLiteOptions => sqLiteOptions.MigrationsAssembly(GetType().Assembly))
|
||||||
// TODO: Remove when https://github.com/dotnet/efcore/pull/35873 is merged & released
|
// TODO: Remove when https://github.com/dotnet/efcore/pull/35873 is merged & released
|
||||||
.ConfigureWarnings(warnings =>
|
.ConfigureWarnings(warnings =>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user