diff --git a/src/Umbraco.Core/Persistence/Factories/MemberTypeReadOnlyFactory.cs b/src/Umbraco.Core/Persistence/Factories/MemberTypeReadOnlyFactory.cs
index b4d5d2e566..ba7a47165b 100644
--- a/src/Umbraco.Core/Persistence/Factories/MemberTypeReadOnlyFactory.cs
+++ b/src/Umbraco.Core/Persistence/Factories/MemberTypeReadOnlyFactory.cs
@@ -9,9 +9,10 @@ namespace Umbraco.Core.Persistence.Factories
{
internal class MemberTypeReadOnlyFactory
{
- public IMemberType BuildEntity(MemberTypeReadOnlyDto dto)
+ public IMemberType BuildEntity(MemberTypeReadOnlyDto dto, out bool needsSaving)
{
var standardPropertyTypes = Constants.Conventions.Member.GetStandardPropertyTypeStubs();
+ needsSaving = false;
var memberType = new MemberType(dto.ParentId);
@@ -47,6 +48,12 @@ namespace Umbraco.Core.Persistence.Factories
{
if (dto.PropertyTypes.Any(x => x.Alias.Equals(standardPropertyType.Key))) continue;
+ // beware!
+ // means that we can return a memberType "from database" that has some property types
+ // that do *not* come from the database and therefore are incomplete eg have no key,
+ // no id, no dataTypeDefinitionId - ouch! - better notify caller of the situation
+ needsSaving = true;
+
//Add the standard PropertyType to the current list
propertyTypes.Add(standardPropertyType.Value);
diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs
index d06399a85b..7d5defe8c9 100644
--- a/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs
@@ -300,13 +300,19 @@ namespace Umbraco.Core.Persistence.Repositories
///
///
///
- private static IEnumerable BuildFromDtos(List dtos)
+ private IEnumerable BuildFromDtos(List dtos)
{
if (dtos == null || dtos.Any() == false)
return Enumerable.Empty();
var factory = new MemberTypeReadOnlyFactory();
- return dtos.Select(factory.BuildEntity);
+ return dtos.Select(x =>
+ {
+ bool needsSaving;
+ var memberType = factory.BuildEntity(x, out needsSaving);
+ if (needsSaving) PersistUpdatedItem(memberType);
+ return memberType;
+ }).ToList();
}
///