浏览代码

Ensure UserData stays unique on delete (#14475)

Stephan Sundermann 3 天之前
父节点
当前提交
2ad37fe021
共有 1 个文件被更改,包括 14 次插入0 次删除
  1. 14 0
      Jellyfin.Server.Implementations/Item/BaseItemRepository.cs

+ 14 - 0
Jellyfin.Server.Implementations/Item/BaseItemRepository.cs

@@ -110,6 +110,20 @@ public sealed class BaseItemRepository
         using var transaction = context.Database.BeginTransaction();
         using var transaction = context.Database.BeginTransaction();
 
 
         var date = (DateTime?)DateTime.UtcNow;
         var date = (DateTime?)DateTime.UtcNow;
+
+        // Remove any UserData entries for the placeholder item that would conflict with the UserData
+        // being detached from the item being deleted. This is necessary because, during an update,
+        // UserData may be reattached to a new entry, but some entries can be left behind.
+        // Ensures there are no duplicate UserId/CustomDataKey combinations for the placeholder.
+        context.UserData
+            .Join(
+                context.UserData.Where(e => e.ItemId == id),
+                placeholder => new { placeholder.UserId, placeholder.CustomDataKey },
+                userData => new { userData.UserId, userData.CustomDataKey },
+                (placeholder, userData) => placeholder)
+            .Where(e => e.ItemId == PlaceholderId)
+            .ExecuteDelete();
+
         // Detach all user watch data
         // Detach all user watch data
         context.UserData.Where(e => e.ItemId == id)
         context.UserData.Where(e => e.ItemId == id)
             .ExecuteUpdate(e => e
             .ExecuteUpdate(e => e