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

attempted to fix multi insert for Itemvalues

JPVenson 6 сар өмнө
parent
commit
30ba35aa0c

+ 11 - 4
Jellyfin.Server.Implementations/Item/BaseItemRepository.cs

@@ -373,6 +373,8 @@ public sealed class BaseItemRepository(
             tuples[i] = (item, ancestorIds, topParent, userdataKey, inheritedTags);
             tuples[i] = (item, ancestorIds, topParent, userdataKey, inheritedTags);
         }
         }
 
 
+        var localFuckingItemValueCache = new Dictionary<(int MagicNumber, string Value), Guid>();
+
         using var context = dbProvider.CreateDbContext();
         using var context = dbProvider.CreateDbContext();
         using var transaction = context.Database.BeginTransaction();
         using var transaction = context.Database.BeginTransaction();
         foreach (var item in tuples)
         foreach (var item in tuples)
@@ -416,10 +418,14 @@ public sealed class BaseItemRepository(
             context.ItemValuesMap.Where(e => e.ItemId == entity.Id).ExecuteDelete();
             context.ItemValuesMap.Where(e => e.ItemId == entity.Id).ExecuteDelete();
             foreach (var itemValue in itemValuesToSave)
             foreach (var itemValue in itemValuesToSave)
             {
             {
-                var refValue = context.ItemValues
-                    .Where(f => f.CleanValue == GetCleanValue(itemValue.Value) && (int)f.Type == itemValue.MagicNumber)
-                    .Select(e => e.ItemValueId)
-                    .FirstOrDefault();
+                if (!localFuckingItemValueCache.TryGetValue(itemValue, out var refValue))
+                {
+                    refValue = context.ItemValues
+                                .Where(f => f.CleanValue == GetCleanValue(itemValue.Value) && (int)f.Type == itemValue.MagicNumber)
+                                .Select(e => e.ItemValueId)
+                                .FirstOrDefault();
+                }
+
                 if (refValue.IsEmpty())
                 if (refValue.IsEmpty())
                 {
                 {
                     context.ItemValues.Add(new ItemValue()
                     context.ItemValues.Add(new ItemValue()
@@ -429,6 +435,7 @@ public sealed class BaseItemRepository(
                         ItemValueId = refValue = Guid.NewGuid(),
                         ItemValueId = refValue = Guid.NewGuid(),
                         Value = itemValue.Value
                         Value = itemValue.Value
                     });
                     });
+                    localFuckingItemValueCache[itemValue] = refValue;
                 }
                 }
 
 
                 context.ItemValuesMap.Add(new ItemValueMap()
                 context.ItemValuesMap.Add(new ItemValueMap()