mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-05-31 12:58:28 +01:00
Fix Deduplication and Save of Items
This commit is contained in:
@@ -1270,6 +1270,7 @@ public sealed class BaseItemRepository(
|
||||
}
|
||||
else
|
||||
{
|
||||
context.BaseItemProviders.Where(e => e.ItemId == entity.Id).ExecuteDelete();
|
||||
context.BaseItems.Attach(entity).State = EntityState.Modified;
|
||||
}
|
||||
|
||||
@@ -1289,22 +1290,23 @@ public sealed class BaseItemRepository(
|
||||
}
|
||||
|
||||
var itemValuesToSave = GetItemValuesToSave(item.Item, item.InheritedTags);
|
||||
var itemValues = itemValuesToSave.Select(e => e.Value).ToArray();
|
||||
context.ItemValuesMap.Where(e => e.ItemId == entity.Id).ExecuteDelete();
|
||||
entity.ItemValues = new List<ItemValueMap>();
|
||||
var referenceValues = context.ItemValues.Where(e => itemValues.Any(f => f == e.CleanValue)).ToArray();
|
||||
|
||||
foreach (var itemValue in itemValuesToSave)
|
||||
{
|
||||
var refValue = referenceValues.FirstOrDefault(f => f.CleanValue == itemValue.Value && (int)f.Type == itemValue.MagicNumber);
|
||||
if (refValue is not null)
|
||||
var refValue = context.ItemValues
|
||||
.Where(f => f.CleanValue == GetCleanValue(itemValue.Value) && (int)f.Type == itemValue.MagicNumber)
|
||||
.Select(e => e.ItemValueId)
|
||||
.FirstOrDefault();
|
||||
if (!refValue.IsEmpty())
|
||||
{
|
||||
entity.ItemValues.Add(new ItemValueMap()
|
||||
{
|
||||
Item = entity,
|
||||
ItemId = entity.Id,
|
||||
ItemValue = null!,
|
||||
ItemValueId = refValue.ItemValueId
|
||||
ItemValueId = refValue
|
||||
});
|
||||
}
|
||||
else
|
||||
|
||||
1595
Jellyfin.Server.Implementations/Migrations/20241113133548_EnforceUniqueItemValue.Designer.cs
generated
Normal file
1595
Jellyfin.Server.Implementations/Migrations/20241113133548_EnforceUniqueItemValue.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,37 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace Jellyfin.Server.Implementations.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class EnforceUniqueItemValue : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_ItemValues_Type_CleanValue",
|
||||
table: "ItemValues");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_ItemValues_Type_CleanValue",
|
||||
table: "ItemValues",
|
||||
columns: new[] { "Type", "CleanValue" },
|
||||
unique: true);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_ItemValues_Type_CleanValue",
|
||||
table: "ItemValues");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_ItemValues_Type_CleanValue",
|
||||
table: "ItemValues",
|
||||
columns: new[] { "Type", "CleanValue" });
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -690,7 +690,8 @@ namespace Jellyfin.Server.Implementations.Migrations
|
||||
|
||||
b.HasKey("ItemValueId");
|
||||
|
||||
b.HasIndex("Type", "CleanValue");
|
||||
b.HasIndex("Type", "CleanValue")
|
||||
.IsUnique();
|
||||
|
||||
b.ToTable("ItemValues");
|
||||
});
|
||||
|
||||
@@ -14,6 +14,6 @@ public class ItemValuesConfiguration : IEntityTypeConfiguration<ItemValue>
|
||||
public void Configure(EntityTypeBuilder<ItemValue> builder)
|
||||
{
|
||||
builder.HasKey(e => e.ItemValueId);
|
||||
builder.HasIndex(e => new { e.Type, e.CleanValue });
|
||||
builder.HasIndex(e => new { e.Type, e.CleanValue }).IsUnique();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user