diff --git a/src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs b/src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs
index 9a96810f23..888ff9a632 100644
--- a/src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs
+++ b/src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs
@@ -310,24 +310,29 @@ namespace Umbraco.Core.Migrations.Install
private void CreateRelationTypeData()
{
var relationType = new RelationTypeDto { Id = 1, Alias = Constants.Conventions.RelationTypes.RelateDocumentOnCopyAlias, ChildObjectType = Constants.ObjectTypes.Document, ParentObjectType = Constants.ObjectTypes.Document, Dual = true, Name = Constants.Conventions.RelationTypes.RelateDocumentOnCopyName };
- relationType.UniqueId = (relationType.Alias + "____" + relationType.Name).ToGuid();
+ relationType.UniqueId = CreateUniqueRelationTypeId(relationType.Alias, relationType.Name);
_database.Insert(Constants.DatabaseSchema.Tables.RelationType, "id", false, relationType);
relationType = new RelationTypeDto { Id = 2, Alias = Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteAlias, ChildObjectType = Constants.ObjectTypes.Document, ParentObjectType = Constants.ObjectTypes.Document, Dual = false, Name = Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteName };
- relationType.UniqueId = (relationType.Alias + "____" + relationType.Name).ToGuid();
+ relationType.UniqueId = CreateUniqueRelationTypeId(relationType.Alias, relationType.Name);
_database.Insert(Constants.DatabaseSchema.Tables.RelationType, "id", false, relationType);
relationType = new RelationTypeDto { Id = 3, Alias = Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteAlias, ChildObjectType = Constants.ObjectTypes.Media, ParentObjectType = Constants.ObjectTypes.Media, Dual = false, Name = Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteName };
- relationType.UniqueId = (relationType.Alias + "____" + relationType.Name).ToGuid();
+ relationType.UniqueId = CreateUniqueRelationTypeId(relationType.Alias, relationType.Name);
_database.Insert(Constants.DatabaseSchema.Tables.RelationType, "id", false, relationType);
relationType = new RelationTypeDto { Id = 4, Alias = Constants.Conventions.RelationTypes.RelatedMediaAlias, ChildObjectType = null, ParentObjectType = null, Dual = false, Name = Constants.Conventions.RelationTypes.RelatedMediaName };
- relationType.UniqueId = (relationType.Alias + "____" + relationType.Name).ToGuid();
+ relationType.UniqueId = CreateUniqueRelationTypeId(relationType.Alias, relationType.Name);
_database.Insert(Constants.DatabaseSchema.Tables.RelationType, "id", false, relationType);
relationType = new RelationTypeDto { Id = 5, Alias = Constants.Conventions.RelationTypes.RelatedDocumentAlias, ChildObjectType = null, ParentObjectType = null, Dual = false, Name = Constants.Conventions.RelationTypes.RelatedDocumentName };
- relationType.UniqueId = (relationType.Alias + "____" + relationType.Name).ToGuid();
+ relationType.UniqueId = CreateUniqueRelationTypeId(relationType.Alias, relationType.Name);
_database.Insert(Constants.DatabaseSchema.Tables.RelationType, "id", false, relationType);
}
+ internal static Guid CreateUniqueRelationTypeId(string alias, string name)
+ {
+ return (alias + "____" + name).ToGuid();
+ }
+
private void CreateKeyValueData()
{
// on install, initialize the umbraco migration plan with the final state
diff --git a/src/Umbraco.Core/Migrations/Upgrade/V_8_5_0/AddNewRelationTypes.cs b/src/Umbraco.Core/Migrations/Upgrade/V_8_5_0/AddNewRelationTypes.cs
index 88c6c43c46..40e541f04c 100644
--- a/src/Umbraco.Core/Migrations/Upgrade/V_8_5_0/AddNewRelationTypes.cs
+++ b/src/Umbraco.Core/Migrations/Upgrade/V_8_5_0/AddNewRelationTypes.cs
@@ -1,4 +1,6 @@
-namespace Umbraco.Core.Migrations.Upgrade.V_8_5_0
+using Umbraco.Core.Migrations.Install;
+
+namespace Umbraco.Core.Migrations.Upgrade.V_8_5_0
{
///
/// Ensures the new relation types are created
@@ -22,7 +24,7 @@
private void CreateRelation(string alias, string name)
{
- var uniqueId = (alias + "____" + name).ToGuid(); //this is the same as how it installs so everything is consistent
+ var uniqueId = DatabaseDataCreator.CreateUniqueRelationTypeId(alias ,name); //this is the same as how it installs so everything is consistent
Insert.IntoTable(Constants.DatabaseSchema.Tables.RelationType)
.Row(new { typeUniqueId = uniqueId, dual = 0, name, alias })
.Do();
diff --git a/src/Umbraco.Core/Models/Relation.cs b/src/Umbraco.Core/Models/Relation.cs
index 8e3a073a96..7afa476226 100644
--- a/src/Umbraco.Core/Models/Relation.cs
+++ b/src/Umbraco.Core/Models/Relation.cs
@@ -22,8 +22,6 @@ namespace Umbraco.Core.Models
///
///
///
- ///
- ///
///
public Relation(int parentId, int childId, IRelationType relationType)
{
@@ -48,7 +46,7 @@ namespace Umbraco.Core.Models
ParentObjectType = parentObjectType;
ChildObjectType = childObjectType;
}
-
+
///
/// Gets or sets the Parent Id of the Relation (Source)
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/RelationRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/RelationRepository.cs
index ab6b02afb4..e6c4c6fd7e 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/RelationRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/RelationRepository.cs
@@ -175,8 +175,16 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
{
var nodes = Database.Fetch(Sql().Select().From().Where(x => x.NodeId == entity.ChildId || x.NodeId == entity.ParentId))
.ToDictionary(x => x.NodeId, x => x.NodeObjectType);
- entity.ParentObjectType = nodes[entity.ParentId].Value;
- entity.ChildObjectType = nodes[entity.ChildId].Value;
+
+ if(nodes.TryGetValue(entity.ParentId, out var parentObjectType))
+ {
+ entity.ParentObjectType = parentObjectType.GetValueOrDefault();
+ }
+
+ if(nodes.TryGetValue(entity.ChildId, out var childObjectType))
+ {
+ entity.ChildObjectType = childObjectType.GetValueOrDefault();
+ }
}
}
}
diff --git a/src/Umbraco.Core/PropertyEditors/DataEditor.cs b/src/Umbraco.Core/PropertyEditors/DataEditor.cs
index 3f5f6afa4f..7dc260e4c7 100644
--- a/src/Umbraco.Core/PropertyEditors/DataEditor.cs
+++ b/src/Umbraco.Core/PropertyEditors/DataEditor.cs
@@ -19,7 +19,7 @@ namespace Umbraco.Core.PropertyEditors
public class DataEditor : IDataEditor
{
private IDictionary _defaultConfiguration;
- private IDataValueEditor _nonConfigured;
+ private IDataValueEditor _dataValueEditor;
///
/// Initializes a new instance of the class.
@@ -91,7 +91,7 @@ namespace Umbraco.Core.PropertyEditors
/// simple enough for now.
///
// TODO: point of that one? shouldn't we always configure?
- public IDataValueEditor GetValueEditor() => ExplicitValueEditor ?? (_nonConfigured ?? (_nonConfigured = CreateValueEditor()));
+ public IDataValueEditor GetValueEditor() => ExplicitValueEditor ?? (_dataValueEditor ?? (_dataValueEditor = CreateValueEditor()));
///
///