Merge pull request #17554 from IDisposable/fix/faster-update-items
Speed up UpdateOrInsertItems for related information
This commit is contained in:
@@ -257,14 +257,14 @@ public class ItemPersistenceService : IItemPersistenceService
|
||||
using var transaction = context.Database.BeginTransaction();
|
||||
|
||||
var ids = tuples.Select(f => f.Item.Id).ToArray();
|
||||
var existingItems = context.BaseItems.Where(e => ids.Contains(e.Id)).Select(f => f.Id).ToArray();
|
||||
var existingItems = context.BaseItems.Where(e => ids.Contains(e.Id)).Select(f => f.Id).ToHashSet();
|
||||
|
||||
foreach (var item in tuples)
|
||||
{
|
||||
var entity = BaseItemMapper.Map(item.Item, _appHost);
|
||||
entity.TopParentId = item.TopParent?.Id;
|
||||
|
||||
if (!existingItems.Any(e => e == entity.Id))
|
||||
if (!existingItems.Contains(entity.Id))
|
||||
{
|
||||
context.BaseItems.Add(entity);
|
||||
}
|
||||
@@ -314,9 +314,11 @@ public class ItemPersistenceService : IItemPersistenceService
|
||||
}).ToArray();
|
||||
context.ItemValues.AddRange(missingItemValues);
|
||||
|
||||
var itemValuesStore = existingValues.Concat(missingItemValues).ToArray();
|
||||
var itemValuesStore = existingValues
|
||||
.Concat(missingItemValues)
|
||||
.ToDictionary(e => (e.Type, e.Value));
|
||||
var valueMap = itemValueMaps
|
||||
.Select(f => (f.Item, Values: f.Values.Select(e => itemValuesStore.First(g => g.Value == e.Value && g.Type == e.MagicNumber)).DistinctBy(e => e.ItemValueId).ToArray()))
|
||||
.Select(f => (f.Item, Values: f.Values.Select(e => itemValuesStore[(e.MagicNumber, e.Value)]).DistinctBy(e => e.ItemValueId).ToArray()))
|
||||
.ToArray();
|
||||
|
||||
var mappedValues = context.ItemValuesMap.Where(e => ids.Contains(e.ItemId)).ToList();
|
||||
|
||||
Reference in New Issue
Block a user