Ensure that all automatic relation types are updated (#13470)

This commit is contained in:
Mole
2022-11-28 12:49:14 +01:00
committed by Nikolaj
parent c88ac85861
commit c9a97984f4
3 changed files with 32 additions and 5 deletions

View File

@@ -1072,10 +1072,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Repositories.Implement
var trackedRelations = new List<UmbracoEntityReference>();
trackedRelations.AddRange(_dataValueReferenceFactories.GetAllReferences(entity.Properties, PropertyEditors));
var relationTypeAliases = trackedRelations
.Select(x => x.RelationTypeAlias)
.Distinct()
.ToArray();
var relationTypeAliases = GetAutomaticRelationTypesAliases(entity.Properties, PropertyEditors).ToArray();
// First delete all auto-relations for this entity
RelationRepository.DeleteByParent(entity.Id, relationTypeAliases);
@@ -1123,6 +1120,31 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Repositories.Implement
RelationRepository.SaveBulk(toSave);
}
private IEnumerable<string> GetAutomaticRelationTypesAliases(
IPropertyCollection properties,
PropertyEditorCollection propertyEditors)
{
var automaticRelationTypesAliases = new HashSet<string>(Constants.Conventions.RelationTypes.AutomaticRelationTypes);
foreach (IProperty property in properties)
{
if (propertyEditors.TryGet(property.PropertyType.PropertyEditorAlias, out IDataEditor? editor) is false )
{
continue;
}
if (editor.GetValueEditor() is IDataValueReference reference)
{
foreach (var alias in reference.GetAutomaticRelationTypesAliases())
{
automaticRelationTypesAliases.Add(alias);
}
}
}
return automaticRelationTypesAliases;
}
/// <summary>
/// Inserts property values for the content entity
/// </summary>