diff --git a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
index 0990934339..b367cb9f74 100644
--- a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
+++ b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
@@ -1219,15 +1219,23 @@ public sealed class BaseItemRepository(
///
public void SaveImages(BaseItemDto item)
{
- ArgumentNullException.ThrowIfNull(item);
+ try
+ {
+ ArgumentNullException.ThrowIfNull(item);
- var images = item.ImageInfos.Select(e => Map(item.Id, e));
- using var context = dbProvider.CreateDbContext();
- using var transaction = context.Database.BeginTransaction();
- context.BaseItemImageInfos.Where(e => e.ItemId == item.Id).ExecuteDelete();
- context.BaseItemImageInfos.AddRange(images);
- context.SaveChanges();
- transaction.Commit();
+ var images = item.ImageInfos.Select(e => Map(item.Id, e));
+ using var context = dbProvider.CreateDbContext();
+ using var transaction = context.Database.BeginTransaction();
+ context.BaseItemImageInfos.Where(e => e.ItemId == item.Id).ExecuteDelete();
+ context.BaseItemImageInfos.AddRange(images);
+ context.SaveChanges();
+ transaction.Commit();
+ }
+ catch (System.Exception ex)
+ {
+ System.Console.WriteLine(ex);
+ throw;
+ }
}
///
@@ -1291,40 +1299,30 @@ public sealed class BaseItemRepository(
var itemValuesToSave = GetItemValuesToSave(item.Item, item.InheritedTags);
context.ItemValuesMap.Where(e => e.ItemId == entity.Id).ExecuteDelete();
- entity.ItemValues = new List();
-
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 (!refValue.IsEmpty())
+ if (refValue.IsEmpty())
{
- entity.ItemValues.Add(new ItemValueMap()
+ context.ItemValues.Add(new ItemValue()
{
- Item = entity,
- ItemId = entity.Id,
- ItemValue = null!,
- ItemValueId = refValue
+ CleanValue = GetCleanValue(itemValue.Value),
+ Type = (ItemValueType)itemValue.MagicNumber,
+ ItemValueId = refValue = Guid.NewGuid(),
+ Value = itemValue.Value
});
}
- else
+
+ context.ItemValuesMap.Add(new ItemValueMap()
{
- entity.ItemValues.Add(new ItemValueMap()
- {
- Item = entity,
- ItemId = entity.Id,
- ItemValue = new ItemValue()
- {
- CleanValue = GetCleanValue(itemValue.Value),
- Type = (ItemValueType)itemValue.MagicNumber,
- ItemValueId = Guid.NewGuid(),
- Value = itemValue.Value
- },
- ItemValueId = Guid.Empty
- });
- }
+ Item = null!,
+ ItemId = entity.Id,
+ ItemValue = null!,
+ ItemValueId = refValue
+ });
}
}
diff --git a/Jellyfin.Server.Implementations/Item/PeopleRepository.cs b/Jellyfin.Server.Implementations/Item/PeopleRepository.cs
index e22fd0806c..0812955a88 100644
--- a/Jellyfin.Server.Implementations/Item/PeopleRepository.cs
+++ b/Jellyfin.Server.Implementations/Item/PeopleRepository.cs
@@ -61,7 +61,7 @@ public class PeopleRepository(IDbContextFactory dbProvider, I
using var transaction = context.Database.BeginTransaction();
context.PeopleBaseItemMap.Where(e => e.ItemId == itemId).ExecuteDelete();
- foreach (var item in people)
+ foreach (var item in people.DistinctBy(e => e.Id)) // yes for __SOME__ reason there can be duplicates.
{
var personEntity = Map(item);
var existingEntity = context.Peoples.FirstOrDefault(e => e.Id == personEntity.Id);
@@ -70,10 +70,6 @@ public class PeopleRepository(IDbContextFactory dbProvider, I
context.Peoples.Add(personEntity);
existingEntity = personEntity;
}
- else
- {
- context.Peoples.Attach(personEntity).State = EntityState.Modified;
- }
context.PeopleBaseItemMap.Add(new PeopleBaseItemMap()
{