diff --git a/src/Umbraco.Core/Migrations/Upgrade/V_8_16_0/AddPropertyTypeGroupColumns.cs b/src/Umbraco.Core/Migrations/Upgrade/V_8_16_0/AddPropertyTypeGroupColumns.cs index 6363172609..ce02d15e0d 100644 --- a/src/Umbraco.Core/Migrations/Upgrade/V_8_16_0/AddPropertyTypeGroupColumns.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/V_8_16_0/AddPropertyTypeGroupColumns.cs @@ -1,4 +1,5 @@ using System.Linq; +using Umbraco.Core.Logging; using Umbraco.Core.Persistence.Dtos; namespace Umbraco.Core.Migrations.Upgrade.V_8_16_0 @@ -12,16 +13,40 @@ namespace Umbraco.Core.Migrations.Upgrade.V_8_16_0 public override void Migrate() { AddColumn("type"); - AddColumn("alias", out var sqls); - var dtos = Database.Fetch(); - foreach (var dto in dtos) - { - // Generate alias from current name - dto.Alias = dto.Text.ToSafeAlias(true); - Database.Update(dto, x => new { x.Alias }); + AddColumn("alias", out var sqls); + + var dtos = Database.Fetch(); + foreach (var dtosPerAlias in dtos.GroupBy(x => x.Text.ToSafeAlias(true))) + { + var dtosPerAliasAndText = dtosPerAlias.GroupBy(x => x.Text); + var numberSuffix = 1; + foreach (var dtosPerText in dtosPerAliasAndText) + { + foreach (var dto in dtosPerText) + { + dto.Alias = dtosPerAlias.Key; + + if (numberSuffix > 1) + { + // More than 1 name found for the alias, so add a suffix + dto.Alias += numberSuffix; + } + + Database.Update(dto, x => new { x.Alias }); + } + + numberSuffix++; + } + + if (numberSuffix > 2) + { + Logger.Error("Detected the same alias {Alias} for different property group names {Names}, the migration added suffixes, but this might break backwards compatibility.", dtosPerAlias.Key, dtosPerAliasAndText.Select(x => x.Key)); + } } - foreach (var sql in sqls) Database.Execute(sql); + + foreach (var sql in sqls) + Database.Execute(sql); } } }