From 9cda7d1b5ae377c8641eea95cb07a6abe163863d Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Mon, 2 Nov 2020 18:43:35 +0100 Subject: [PATCH] Fix for https://github.com/umbraco/Umbraco-CMS/pull/9146 - We need to take language and segment into account (cherry picked from commit 223b19cbd81b1dd9dce9be757d1b96f261e9b48b) --- .../Repositories/Implement/ContentRepositoryBase.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/ContentRepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/ContentRepositoryBase.cs index 2ea4914aaa..05df4efb4e 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Implement/ContentRepositoryBase.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Implement/ContentRepositoryBase.cs @@ -893,6 +893,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. @@ -901,18 +902,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); @@ -932,6 +935,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement { Database.Execute(SqlContext.Sql().Delete().WhereIn(x => x.Id, existingPropDataIds)); } + } private class NodeIdKey