diff --git a/Jellyfin.Server/Migrations/Routines/MigrateLibraryDb.cs b/Jellyfin.Server/Migrations/Routines/MigrateLibraryDb.cs index dfe497c490..d2fbcbec94 100644 --- a/Jellyfin.Server/Migrations/Routines/MigrateLibraryDb.cs +++ b/Jellyfin.Server/Migrations/Routines/MigrateLibraryDb.cs @@ -163,7 +163,6 @@ public class MigrateLibraryDb : IMigrationRoutine dbContext.UserData.ExecuteDelete(); var users = dbContext.Users.AsNoTracking().ToImmutableArray(); - var oldUserdata = new Dictionary(); foreach (var entity in queryResult) { @@ -184,6 +183,8 @@ public class MigrateLibraryDb : IMigrationRoutine dbContext.UserData.Add(userData); } + users.Clear(); + legacyBaseItemWithUserKeys.Clear(); _logger.LogInformation("Try saving {0} UserData entries.", dbContext.UserData.Local.Count); dbContext.SaveChanges(); @@ -220,11 +221,12 @@ public class MigrateLibraryDb : IMigrationRoutine dbContext.PeopleBaseItemMap.ExecuteDelete(); var peopleCache = new Dictionary Items)>(); + var baseItemIds = dbContext.BaseItems.Select(b => b.Id).ToHashSet(); foreach (SqliteDataReader reader in connection.Query(personsQuery)) { var itemId = reader.GetGuid(0); - if (!dbContext.BaseItems.Any(f => f.Id == itemId)) + if (!baseItemIds.Contains(itemId)) { _logger.LogError("Dont save person {0} because its not in use by any BaseItem", reader.GetString(1)); continue; @@ -256,12 +258,16 @@ public class MigrateLibraryDb : IMigrationRoutine }); } + baseItemIds.Clear(); + foreach (var item in peopleCache) { dbContext.Peoples.Add(item.Value.Person); dbContext.PeopleBaseItemMap.AddRange(item.Value.Items.DistinctBy(e => (e.ItemId, e.PeopleId))); } + peopleCache.Clear(); + _logger.LogInformation("Try saving {0} People entries.", dbContext.MediaStreamInfos.Local.Count); dbContext.SaveChanges(); migrationTotalTime += stopwatch.Elapsed;