diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/ContentRepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/ContentRepositoryBase.cs index 77d114abe1..a7b23d95cb 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Implement/ContentRepositoryBase.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Implement/ContentRepositoryBase.cs @@ -1010,6 +1010,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement /// /// /// + protected void ReplacePropertyValues(TEntity entity, int versionId, int publishedVersionId, out bool edited, out HashSet editedCultures) { // Replace the property data. @@ -1018,18 +1019,20 @@ namespace Umbraco.Core.Persistence.Repositories.Implement var propDataSql = SqlContext.Sql().Select("*").From().Where(x => x.VersionId == versionId).ForUpdate(); var existingPropData = Database.Fetch(propDataSql); - var propertyTypeToPropertyData = new Dictionary<(int propertyTypeId, int versionId), PropertyDataDto>(); + var propertyTypeToPropertyData = new Dictionary<(int propertyTypeId, int versionId, int? languageId, string segment), PropertyDataDto>(); var existingPropDataIds = new List(); foreach (var p in existingPropData) { existingPropDataIds.Add(p.Id); - propertyTypeToPropertyData[(p.PropertyTypeId, p.VersionId)] = p; + propertyTypeToPropertyData[(p.PropertyTypeId, p.VersionId, p.LanguageId, p.Segment)] = p; } var propertyDataDtos = PropertyFactory.BuildDtos(entity.ContentType.Variations, entity.VersionId, publishedVersionId, entity.Properties, LanguageRepository, out edited, out editedCultures); + foreach (var propertyDataDto in propertyDataDtos) { + // Check if this already exists and update, else insert a new one - if (propertyTypeToPropertyData.TryGetValue((propertyDataDto.PropertyTypeId, propertyDataDto.VersionId), out var propData)) + if (propertyTypeToPropertyData.TryGetValue((propertyDataDto.PropertyTypeId, propertyDataDto.VersionId, propertyDataDto.LanguageId, propertyDataDto.Segment), out var propData)) { propertyDataDto.Id = propData.Id; Database.Update(propertyDataDto); @@ -1049,6 +1052,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement { Database.Execute(SqlContext.Sql().Delete().WhereIn(x => x.Id, existingPropDataIds)); } + } private class NodeIdKey