From 9bf45d60311d654fa16e50c8aa4fd8b7f2d54b62 Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Mon, 17 Dec 2012 14:00:46 -0100 Subject: [PATCH] Updating MediaRepository to not create versions for Media, and ensuring that properties are properly updated. --- src/Umbraco.Core/Models/Media.cs | 10 ------- .../Repositories/ContentRepository.cs | 14 ++++++++- .../Repositories/MediaRepository.cs | 29 +++++++++++++++---- 3 files changed, 37 insertions(+), 16 deletions(-) diff --git a/src/Umbraco.Core/Models/Media.cs b/src/Umbraco.Core/Models/Media.cs index 45c1ebeb62..dd2ec17f2a 100644 --- a/src/Umbraco.Core/Models/Media.cs +++ b/src/Umbraco.Core/Models/Media.cs @@ -108,15 +108,5 @@ namespace Umbraco.Core.Models if (Key == Guid.Empty) Key = Guid.NewGuid(); } - - /// - /// Method to call when Entity is being updated - /// - /// Modified Date is set and a new Version guid is set - internal override void UpdatingEntity() - { - base.UpdatingEntity(); - Version = Guid.NewGuid(); - } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs index 7280d7aa26..efdafa91d8 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs @@ -342,6 +342,8 @@ namespace Umbraco.Core.Persistence.Repositories //Create the PropertyData for this version - cmsPropertyData var propertyFactory = new PropertyFactory(((Content)entity).ContentType, entity.Version, entity.Id); var propertyDataDtos = propertyFactory.BuildDto(entity.Properties); + var keyDictionary = new Dictionary(); + //Add Properties foreach (var propertyDataDto in propertyDataDtos) { @@ -351,7 +353,17 @@ namespace Umbraco.Core.Persistence.Repositories } else { - Database.Insert(propertyDataDto); + int primaryKey = Convert.ToInt32(Database.Insert(propertyDataDto)); + keyDictionary.Add(propertyDataDto.PropertyTypeId, primaryKey); + } + } + + //Update Properties with its newly set Id + if (keyDictionary.Any()) + { + foreach (var property in entity.Properties) + { + property.Id = keyDictionary[property.PropertyTypeId]; } } diff --git a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs index 8b4f57f650..288ccd43e5 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs @@ -231,7 +231,7 @@ namespace Umbraco.Core.Persistence.Repositories protected override void PersistUpdatedItem(IMedia entity) { - //Updates Modified date and Version Guid + //Updates Modified date ((Models.Media)entity).UpdatingEntity(); var factory = new MediaFactory(NodeObjectTypeId, entity.Id); @@ -252,17 +252,36 @@ namespace Umbraco.Core.Persistence.Repositories Database.Update(newContentDto); } - //Create a new version - cmsContentVersion - //Assumes a new Version guid and Version date (modified date) has been set - Database.Insert(dto); + //Updates the current version - cmsContentVersion + //Assumes a Version guid exists and Version date (modified date) has been set/updated + Database.Update(dto); //Create the PropertyData for this version - cmsPropertyData var propertyFactory = new PropertyFactory(entity.ContentType, entity.Version, entity.Id); var propertyDataDtos = propertyFactory.BuildDto(entity.Properties); + var keyDictionary = new Dictionary(); + //Add Properties foreach (var propertyDataDto in propertyDataDtos) { - Database.Insert(propertyDataDto); + if (propertyDataDto.Id > 0) + { + Database.Update(propertyDataDto); + } + else + { + int primaryKey = Convert.ToInt32(Database.Insert(propertyDataDto)); + keyDictionary.Add(propertyDataDto.PropertyTypeId, primaryKey); + } + } + + //Update Properties with its newly set Id + if (keyDictionary.Any()) + { + foreach (var property in entity.Properties) + { + property.Id = keyDictionary[property.PropertyTypeId]; + } } ((ICanBeDirty)entity).ResetDirtyProperties();