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() {