diff --git a/src/Umbraco.Core/Models/Relation.cs b/src/Umbraco.Core/Models/Relation.cs index 38ad39393b..c5fc47944b 100644 --- a/src/Umbraco.Core/Models/Relation.cs +++ b/src/Umbraco.Core/Models/Relation.cs @@ -10,7 +10,7 @@ namespace Umbraco.Core.Models /// [Serializable] [DataContract(IsReference = true)] - public class Relation : Entity + public class Relation : Entity, IAggregateRoot { //NOTE: The datetime column from umbracoRelation is set on CreateDate on the Entity private int _parentId; diff --git a/src/Umbraco.Core/Models/RelationType.cs b/src/Umbraco.Core/Models/RelationType.cs index 38f485e481..6cda501c59 100644 --- a/src/Umbraco.Core/Models/RelationType.cs +++ b/src/Umbraco.Core/Models/RelationType.cs @@ -10,7 +10,7 @@ namespace Umbraco.Core.Models /// [Serializable] [DataContract(IsReference = true)] - public class RelationType : Entity + public class RelationType : Entity, IAggregateRoot { private string _name; private string _alias; diff --git a/src/Umbraco.Core/Persistence/Factories/IEntityFactory.cs b/src/Umbraco.Core/Persistence/Factories/IEntityFactory.cs index 6fae6ff521..6053090178 100644 --- a/src/Umbraco.Core/Persistence/Factories/IEntityFactory.cs +++ b/src/Umbraco.Core/Persistence/Factories/IEntityFactory.cs @@ -1,6 +1,4 @@ -using Umbraco.Core.Models.EntityBase; - -namespace Umbraco.Core.Persistence.Factories +namespace Umbraco.Core.Persistence.Factories { internal interface IEntityFactory where TEntity : class diff --git a/src/Umbraco.Core/Persistence/Factories/RelationFactory.cs b/src/Umbraco.Core/Persistence/Factories/RelationFactory.cs new file mode 100644 index 0000000000..fc2f2c1ee1 --- /dev/null +++ b/src/Umbraco.Core/Persistence/Factories/RelationFactory.cs @@ -0,0 +1,49 @@ +using Umbraco.Core.Models; +using Umbraco.Core.Models.Rdbms; + +namespace Umbraco.Core.Persistence.Factories +{ + internal class RelationFactory : IEntityFactory + { + private readonly RelationType _relationType; + + public RelationFactory(RelationType relationType) + { + _relationType = relationType; + } + + #region Implementation of IEntityFactory + + public Relation BuildEntity(RelationDto dto) + { + var entity = new Relation(dto.ParentId, dto.ChildId) + { + Comment = dto.Comment, + CreateDate = dto.Datetime, + Id = dto.Id, + UpdateDate = dto.Datetime, + RelationType = _relationType + }; + return entity; + } + + public RelationDto BuildDto(Relation entity) + { + var dto = new RelationDto + { + ChildId = entity.ChildId, + Comment = entity.Comment, + Datetime = entity.CreateDate, + ParentId = entity.ParentId, + RelationType = _relationType.Id + }; + + if (entity.HasIdentity) + dto.Id = entity.Id; + + return dto; + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Factories/RelationTypeFactory.cs b/src/Umbraco.Core/Persistence/Factories/RelationTypeFactory.cs new file mode 100644 index 0000000000..c33886f1dd --- /dev/null +++ b/src/Umbraco.Core/Persistence/Factories/RelationTypeFactory.cs @@ -0,0 +1,39 @@ +using Umbraco.Core.Models; +using Umbraco.Core.Models.Rdbms; + +namespace Umbraco.Core.Persistence.Factories +{ + internal class RelationTypeFactory : IEntityFactory + { + #region Implementation of IEntityFactory + + public RelationType BuildEntity(RelationTypeDto dto) + { + var entity = new RelationType(dto.ChildObjectType, dto.ParentObjectType, dto.Alias) + { + Id = dto.Id, + IsBidirectional = dto.Dual, + Name = dto.Name + }; + return entity; + } + + public RelationTypeDto BuildDto(RelationType entity) + { + var dto = new RelationTypeDto + { + Alias = entity.Alias, + ChildObjectType = entity.ChildObjectType, + Dual = entity.IsBidirectional, + Name = entity.Name, + ParentObjectType = entity.ParentObjectType + }; + if(entity.HasIdentity) + dto.Id = entity.Id; + + return dto; + } + + #endregion + } +} \ No newline at end of file