2
0
Эх сурвалжийг харах

Replicated changes made from #13492

JPVenson 3 сар өмнө
parent
commit
a6b4d124d7

+ 6 - 0
src/Jellyfin.Database/Jellyfin.Database.Implementations/IJellyfinDatabaseProvider.cs

@@ -27,6 +27,12 @@ public interface IJellyfinDatabaseProvider
     /// <param name="modelBuilder">The ModelBuilder from EFCore.</param>
     /// <param name="modelBuilder">The ModelBuilder from EFCore.</param>
     void OnModelCreating(ModelBuilder modelBuilder);
     void OnModelCreating(ModelBuilder modelBuilder);
 
 
+    /// <summary>
+    /// Will be invoked when EFCore wants to configure its model.
+    /// </summary>
+    /// <param name="configurationBuilder">The ModelConfigurationBuilder from EFCore.</param>
+    void ConfigureConventions(ModelConfigurationBuilder configurationBuilder);
+
     /// <summary>
     /// <summary>
     /// If supported this should run any periodic maintaince tasks.
     /// If supported this should run any periodic maintaince tasks.
     /// </summary>
     /// </summary>

+ 7 - 0
src/Jellyfin.Database/Jellyfin.Database.Implementations/JellyfinDbContext.cs

@@ -272,4 +272,11 @@ public class JellyfinDbContext(DbContextOptions<JellyfinDbContext> options, ILog
         // Configuration for each entity is in its own class inside 'ModelConfiguration'.
         // Configuration for each entity is in its own class inside 'ModelConfiguration'.
         modelBuilder.ApplyConfigurationsFromAssembly(typeof(JellyfinDbContext).Assembly);
         modelBuilder.ApplyConfigurationsFromAssembly(typeof(JellyfinDbContext).Assembly);
     }
     }
+
+    /// <inheritdoc />
+    protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
+    {
+        jellyfinDatabaseProvider.ConfigureConventions(configurationBuilder);
+        base.ConfigureConventions(configurationBuilder);
+    }
 }
 }

+ 20 - 0
src/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/DoNotUseReturningClauseConvention.cs

@@ -0,0 +1,20 @@
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using Microsoft.EntityFrameworkCore.Metadata.Conventions;
+
+namespace Jellyfin.Database.Providers.SqLite;
+
+internal class DoNotUseReturningClauseConvention : IModelFinalizingConvention
+{
+    /// <inheritdoc/>
+    public void ProcessModelFinalizing(
+        IConventionModelBuilder modelBuilder,
+        IConventionContext<IConventionModelBuilder> context)
+    {
+        foreach (var entityType in modelBuilder.Metadata.GetEntityTypes())
+        {
+            entityType.UseSqlReturningClause(false);
+        }
+    }
+}

+ 6 - 0
src/Jellyfin.Database/Jellyfin.Database.Providers.SqLite/SqliteDatabaseProvider.cs

@@ -78,4 +78,10 @@ public sealed class SqliteDatabaseProvider : IJellyfinDatabaseProvider
 
 
         SqliteConnection.ClearAllPools();
         SqliteConnection.ClearAllPools();
     }
     }
+
+    /// <inheritdoc/>
+    public void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
+    {
+        configurationBuilder.Conventions.Add(_ => new DoNotUseReturningClauseConvention());
+    }
 }
 }