diff --git a/src/Umbraco.Core/Models/Entities/EntityBase.cs b/src/Umbraco.Core/Models/Entities/EntityBase.cs
index 43837fa776..cdb3ecebc5 100644
--- a/src/Umbraco.Core/Models/Entities/EntityBase.cs
+++ b/src/Umbraco.Core/Models/Entities/EntityBase.cs
@@ -81,37 +81,7 @@ namespace Umbraco.Core.Models.Entities
_key = Guid.Empty;
_hasIdentity = false;
}
-
- ///
- /// Updates the entity when it is being saved for the first time.
- ///
- internal virtual void AddingEntity()
- {
- var now = DateTime.Now;
-
- // set the create and update dates, if not already set
- if (IsPropertyDirty("CreateDate") == false || _createDate == default)
- CreateDate = now;
- if (IsPropertyDirty("UpdateDate") == false || _updateDate == default)
- UpdateDate = now;
- }
-
- ///
- /// Updates the entity when it is being saved.
- ///
- internal virtual void UpdatingEntity()
- {
- var now = DateTime.Now;
-
- // just in case
- if (_createDate == default)
- CreateDate = now;
-
- // set the update date if not already set
- if (IsPropertyDirty("UpdateDate") == false || _updateDate == default)
- UpdateDate = now;
- }
-
+
public virtual bool Equals(EntityBase other)
{
return other != null && (ReferenceEquals(this, other) || SameIdentityAs(other));
diff --git a/src/Umbraco.Core/Models/Entities/EntityExtensions.cs b/src/Umbraco.Core/Models/Entities/EntityExtensions.cs
new file mode 100644
index 0000000000..2ee6a2d5ed
--- /dev/null
+++ b/src/Umbraco.Core/Models/Entities/EntityExtensions.cs
@@ -0,0 +1,46 @@
+using System;
+
+namespace Umbraco.Core.Models.Entities
+{
+ internal static class EntityExtensions
+ {
+ ///
+ /// Updates the entity when it is being saved.
+ ///
+ internal static void UpdatingEntity(this IEntity entity)
+ {
+ var now = DateTime.Now;
+
+ // just in case
+ if (entity.CreateDate == default)
+ {
+ entity.CreateDate = now;
+ }
+
+ // set the update date if not already set
+ if (entity.UpdateDate == default || (entity is ICanBeDirty canBeDirty && canBeDirty.IsPropertyDirty("UpdateDate") == false))
+ {
+ entity.UpdateDate = now;
+ }
+ }
+
+ ///
+ /// Updates the entity when it is being saved for the first time.
+ ///
+ internal static void AddingEntity(this IEntity entity)
+ {
+ var now = DateTime.Now;
+ var canBeDirty = entity as ICanBeDirty;
+
+ // set the create and update dates, if not already set
+ if (entity.CreateDate == default || canBeDirty?.IsPropertyDirty("CreateDate") == false)
+ {
+ entity.CreateDate = now;
+ }
+ if (entity.UpdateDate == default || canBeDirty?.IsPropertyDirty("UpdateDate") == false)
+ {
+ entity.UpdateDate = now;
+ }
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Models/Member.cs b/src/Umbraco.Core/Models/Member.cs
index 0e91065d56..b473a154f1 100644
--- a/src/Umbraco.Core/Models/Member.cs
+++ b/src/Umbraco.Core/Models/Member.cs
@@ -478,19 +478,6 @@ namespace Umbraco.Core.Models
set => SetPropertyValueAndDetectChanges(value, ref _providerUserKey, nameof(ProviderUserKey));
}
-
- ///
- /// Method to call when Entity is being saved
- ///
- /// Created date is set and a Unique key is assigned
- internal override void AddingEntity()
- {
- base.AddingEntity();
-
- if (ProviderUserKey == null)
- ProviderUserKey = Key;
- }
-
/* Internal experiment - only used for mapping queries.
* Adding these to have first level properties instead of the Properties collection.
*/
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/AuditEntryRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/AuditEntryRepository.cs
index 1486935e2a..c3d34cc3e9 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/AuditEntryRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/AuditEntryRepository.cs
@@ -100,7 +100,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
///
protected override void PersistNewItem(IAuditEntry entity)
{
- ((EntityBase) entity).AddingEntity();
+ entity.AddingEntity();
var dto = AuditEntryFactory.BuildDto(entity);
Database.Insert(dto);
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/ConsentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/ConsentRepository.cs
index 8df9bf686d..57d5dfa864 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/ConsentRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/ConsentRepository.cs
@@ -69,7 +69,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
///
protected override void PersistNewItem(IConsent entity)
{
- ((EntityBase) entity).AddingEntity();
+ entity.AddingEntity();
var dto = ConsentFactory.BuildDto(entity);
Database.Insert(dto);
@@ -80,7 +80,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
///
protected override void PersistUpdatedItem(IConsent entity)
{
- ((EntityBase) entity).UpdatingEntity();
+ entity.UpdatingEntity();
var dto = ConsentFactory.BuildDto(entity);
Database.Update(dto);
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/ContentTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/ContentTypeRepository.cs
index 98ddcdcb17..9d77eb0990 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/ContentTypeRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/ContentTypeRepository.cs
@@ -5,6 +5,7 @@ using NPoco;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
+using Umbraco.Core.Models.Entities;
using Umbraco.Core.Persistence.Dtos;
using Umbraco.Core.Persistence.Querying;
using Umbraco.Core.Persistence.SqlSyntax;
@@ -230,7 +231,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
throw ex;
}
- ((ContentType)entity).AddingEntity();
+ entity.AddingEntity();
PersistNewBaseContentType(entity);
PersistTemplates(entity, false);
@@ -270,7 +271,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
ValidateAlias(entity);
//Updates Modified date
- ((ContentType)entity).UpdatingEntity();
+ entity.UpdatingEntity();
//Look up parent to get and set the correct Path if ParentId has changed
if (entity.IsPropertyDirty("ParentId"))
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/DataTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/DataTypeRepository.cs
index 02ba4d1c13..dac8fda5ec 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/DataTypeRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/DataTypeRepository.cs
@@ -9,6 +9,7 @@ using Umbraco.Core.Events;
using Umbraco.Core.Exceptions;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
+using Umbraco.Core.Models.Entities;
using Umbraco.Core.Persistence.Dtos;
using Umbraco.Core.Persistence.Factories;
using Umbraco.Core.Persistence.Querying;
@@ -106,7 +107,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistNewItem(IDataType entity)
{
- ((DataType)entity).AddingEntity();
+ entity.AddingEntity();
//ensure a datatype has a unique name before creating it
entity.Name = EnsureUniqueNodeName(entity.Name);
@@ -174,7 +175,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
}
//Updates Modified date
- ((DataType)entity).UpdatingEntity();
+ entity.UpdatingEntity();
//Look up parent to get and set the correct Path if ParentId has changed
if (entity.IsPropertyDirty("ParentId"))
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/DictionaryRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/DictionaryRepository.cs
index be1e28fcc1..0b58663952 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/DictionaryRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/DictionaryRepository.cs
@@ -148,7 +148,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistUpdatedItem(IDictionaryItem entity)
{
- ((EntityBase)entity).UpdatingEntity();
+ entity.UpdatingEntity();
foreach (var translation in entity.Translations)
translation.Value = translation.Value.ToValidXmlString();
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/DocumentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/DocumentRepository.cs
index 7e867c924c..30a2927cc8 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/DocumentRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/DocumentRepository.cs
@@ -6,6 +6,7 @@ using Umbraco.Core.Cache;
using Umbraco.Core.Exceptions;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
+using Umbraco.Core.Models.Entities;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Persistence.Dtos;
using Umbraco.Core.Persistence.Factories;
@@ -263,21 +264,16 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistNewItem(IContent entity)
{
- // TODO: https://github.com/umbraco/Umbraco-CMS/issues/4234 - sort out IContent vs Content
- // however, it's not just so we have access to AddingEntity
- // there are tons of things at the end of the methods, that can only work with a true Content
- // and basically, the repository requires a Content, not an IContent
- var content = (Content)entity;
+ entity.AddingEntity();
- content.AddingEntity();
- var publishing = content.PublishedState == PublishedState.Publishing;
+ var publishing = entity.PublishedState == PublishedState.Publishing;
// ensure that the default template is assigned
if (entity.TemplateId.HasValue == false)
entity.TemplateId = entity.ContentType.DefaultTemplate?.Id;
// sanitize names
- SanitizeNames(content, publishing);
+ SanitizeNames(entity, publishing);
// ensure that strings don't contain characters that are invalid in xml
// TODO: do we really want to keep doing this here?
@@ -327,11 +323,11 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
contentVersionDto.NodeId = nodeDto.NodeId;
contentVersionDto.Current = !publishing;
Database.Insert(contentVersionDto);
- content.VersionId = contentVersionDto.Id;
+ entity.VersionId = contentVersionDto.Id;
// persist the document version dto
var documentVersionDto = dto.DocumentVersionDto;
- documentVersionDto.Id = content.VersionId;
+ documentVersionDto.Id = entity.VersionId;
if (publishing)
documentVersionDto.Published = true;
Database.Insert(documentVersionDto);
@@ -339,62 +335,62 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
// and again in case we're publishing immediately
if (publishing)
{
- content.PublishedVersionId = content.VersionId;
+ entity.PublishedVersionId = entity.VersionId;
contentVersionDto.Id = 0;
contentVersionDto.Current = true;
- contentVersionDto.Text = content.Name;
+ contentVersionDto.Text = entity.Name;
Database.Insert(contentVersionDto);
- content.VersionId = contentVersionDto.Id;
+ entity.VersionId = contentVersionDto.Id;
- documentVersionDto.Id = content.VersionId;
+ documentVersionDto.Id = entity.VersionId;
documentVersionDto.Published = false;
Database.Insert(documentVersionDto);
}
// persist the property data
- var propertyDataDtos = PropertyFactory.BuildDtos(content.ContentType.Variations, content.VersionId, content.PublishedVersionId, entity.Properties, LanguageRepository, out var edited, out var editedCultures);
+ var propertyDataDtos = PropertyFactory.BuildDtos(entity.ContentType.Variations, entity.VersionId, entity.PublishedVersionId, entity.Properties, LanguageRepository, out var edited, out var editedCultures);
foreach (var propertyDataDto in propertyDataDtos)
Database.Insert(propertyDataDto);
// if !publishing, we may have a new name != current publish name,
// also impacts 'edited'
- if (!publishing && content.PublishName != content.Name)
+ if (!publishing && entity.PublishName != entity.Name)
edited = true;
// persist the document dto
// at that point, when publishing, the entity still has its old Published value
// so we need to explicitly update the dto to persist the correct value
- if (content.PublishedState == PublishedState.Publishing)
+ if (entity.PublishedState == PublishedState.Publishing)
dto.Published = true;
dto.NodeId = nodeDto.NodeId;
- content.Edited = dto.Edited = !dto.Published || edited; // if not published, always edited
+ entity.Edited = dto.Edited = !dto.Published || edited; // if not published, always edited
Database.Insert(dto);
//insert the schedule
- PersistContentSchedule(content, false);
+ PersistContentSchedule(entity, false);
// persist the variations
- if (content.ContentType.VariesByCulture())
+ if (entity.ContentType.VariesByCulture())
{
// bump dates to align cultures to version
if (publishing)
- content.AdjustDates(contentVersionDto.VersionDate);
+ entity.AdjustDates(contentVersionDto.VersionDate);
// names also impact 'edited'
// ReSharper disable once UseDeconstruction
- foreach (var cultureInfo in content.CultureInfos)
- if (cultureInfo.Name != content.GetPublishName(cultureInfo.Culture))
+ foreach (var cultureInfo in entity.CultureInfos)
+ if (cultureInfo.Name != entity.GetPublishName(cultureInfo.Culture))
(editedCultures ?? (editedCultures = new HashSet(StringComparer.OrdinalIgnoreCase))).Add(cultureInfo.Culture);
// insert content variations
- Database.BulkInsertRecords(GetContentVariationDtos(content, publishing));
+ Database.BulkInsertRecords(GetContentVariationDtos(entity, publishing));
// insert document variations
- Database.BulkInsertRecords(GetDocumentVariationDtos(content, publishing, editedCultures));
+ Database.BulkInsertRecords(GetDocumentVariationDtos(entity, publishing, editedCultures));
}
// refresh content
- content.SetCultureEdited(editedCultures);
+ entity.SetCultureEdited(editedCultures);
// trigger here, before we reset Published etc
OnUowRefreshedEntity(new ScopedEntityEventArgs(AmbientScope, entity));
@@ -402,23 +398,23 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
// flip the entity's published property
// this also flips its published state
// note: what depends on variations (eg PublishNames) is managed directly by the content
- if (content.PublishedState == PublishedState.Publishing)
+ if (entity.PublishedState == PublishedState.Publishing)
{
- content.Published = true;
- content.PublishTemplateId = content.TemplateId;
- content.PublisherId = content.WriterId;
- content.PublishName = content.Name;
- content.PublishDate = content.UpdateDate;
+ entity.Published = true;
+ entity.PublishTemplateId = entity.TemplateId;
+ entity.PublisherId = entity.WriterId;
+ entity.PublishName = entity.Name;
+ entity.PublishDate = entity.UpdateDate;
SetEntityTags(entity, _tagRepository);
}
- else if (content.PublishedState == PublishedState.Unpublishing)
+ else if (entity.PublishedState == PublishedState.Unpublishing)
{
- content.Published = false;
- content.PublishTemplateId = null;
- content.PublisherId = null;
- content.PublishName = null;
- content.PublishDate = null;
+ entity.Published = false;
+ entity.PublishTemplateId = null;
+ entity.PublisherId = null;
+ entity.PublishName = null;
+ entity.PublishDate = null;
ClearEntityTags(entity, _tagRepository);
}
@@ -440,34 +436,33 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistUpdatedItem(IContent entity)
{
- // however, it's not just so we have access to AddingEntity
- // there are tons of things at the end of the methods, that can only work with a true Content
- // and basically, the repository requires a Content, not an IContent
- var content = (Content)entity;
+ var entityBase = entity as EntityBase;
+ var isEntityDirty = entityBase != null && entityBase.IsDirty();
// check if we need to make any database changes at all
- if ((content.PublishedState == PublishedState.Published || content.PublishedState == PublishedState.Unpublished)
- && !content.IsEntityDirty() && !content.IsAnyUserPropertyDirty())
+ if ((entity.PublishedState == PublishedState.Published || entity.PublishedState == PublishedState.Unpublished)
+ && !isEntityDirty && !entity.IsAnyUserPropertyDirty())
return; // no change to save, do nothing, don't even update dates
// whatever we do, we must check that we are saving the current version
- var version = Database.Fetch(SqlContext.Sql().Select().From().Where(x => x.Id == content.VersionId)).FirstOrDefault();
+ var version = Database.Fetch(SqlContext.Sql().Select().From().Where(x => x.Id == entity.VersionId)).FirstOrDefault();
if (version == null || !version.Current)
throw new InvalidOperationException("Cannot save a non-current version.");
// update
- content.UpdatingEntity();
- var publishing = content.PublishedState == PublishedState.Publishing;
+ entity.UpdatingEntity();
+
+ var publishing = entity.PublishedState == PublishedState.Publishing;
// check if we need to create a new version
- if (publishing && content.PublishedVersionId > 0)
+ if (publishing && entity.PublishedVersionId > 0)
{
// published version is not published anymore
- Database.Execute(Sql().Update(u => u.Set(x => x.Published, false)).Where(x => x.Id == content.PublishedVersionId));
+ Database.Execute(Sql().Update(u => u.Set(x => x.Published, false)).Where(x => x.Id == entity.PublishedVersionId));
}
// sanitize names
- SanitizeNames(content, publishing);
+ SanitizeNames(entity, publishing);
// ensure that strings don't contain characters that are invalid in xml
// TODO: do we really want to keep doing this here?
@@ -507,13 +502,13 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
// and, if publishing, insert new content & document version dtos
if (publishing)
{
- content.PublishedVersionId = content.VersionId;
+ entity.PublishedVersionId = entity.VersionId;
contentVersionDto.Id = 0; // want a new id
contentVersionDto.Current = true; // current version
- contentVersionDto.Text = content.Name;
+ contentVersionDto.Text = entity.Name;
Database.Insert(contentVersionDto);
- content.VersionId = documentVersionDto.Id = contentVersionDto.Id; // get the new id
+ entity.VersionId = documentVersionDto.Id = contentVersionDto.Id; // get the new id
documentVersionDto.Published = false; // non-published version
Database.Insert(documentVersionDto);
@@ -521,31 +516,31 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
// replace the property data (rather than updating)
// only need to delete for the version that existed, the new version (if any) has no property data yet
- var versionToDelete = publishing ? content.PublishedVersionId : content.VersionId;
+ var versionToDelete = publishing ? entity.PublishedVersionId : entity.VersionId;
var deletePropertyDataSql = Sql().Delete().Where(x => x.VersionId == versionToDelete);
Database.Execute(deletePropertyDataSql);
// insert property data
- var propertyDataDtos = PropertyFactory.BuildDtos(content.ContentType.Variations, content.VersionId, publishing ? content.PublishedVersionId : 0,
+ var propertyDataDtos = PropertyFactory.BuildDtos(entity.ContentType.Variations, entity.VersionId, publishing ? entity.PublishedVersionId : 0,
entity.Properties, LanguageRepository, out var edited, out var editedCultures);
foreach (var propertyDataDto in propertyDataDtos)
Database.Insert(propertyDataDto);
// if !publishing, we may have a new name != current publish name,
// also impacts 'edited'
- if (!publishing && content.PublishName != content.Name)
+ if (!publishing && entity.PublishName != entity.Name)
edited = true;
- if (content.ContentType.VariesByCulture())
+ if (entity.ContentType.VariesByCulture())
{
// bump dates to align cultures to version
if (publishing)
- content.AdjustDates(contentVersionDto.VersionDate);
+ entity.AdjustDates(contentVersionDto.VersionDate);
// names also impact 'edited'
// ReSharper disable once UseDeconstruction
- foreach (var cultureInfo in content.CultureInfos)
- if (cultureInfo.Name != content.GetPublishName(cultureInfo.Culture))
+ foreach (var cultureInfo in entity.CultureInfos)
+ if (cultureInfo.Name != entity.GetPublishName(cultureInfo.Culture))
{
edited = true;
(editedCultures ?? (editedCultures = new HashSet(StringComparer.OrdinalIgnoreCase))).Add(cultureInfo.Culture);
@@ -563,7 +558,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
Database.Execute(deleteContentVariations);
// replace the document version variations (rather than updating)
- var deleteDocumentVariations = Sql().Delete().Where(x => x.NodeId == content.Id);
+ var deleteDocumentVariations = Sql().Delete().Where(x => x.NodeId == entity.Id);
Database.Execute(deleteDocumentVariations);
// TODO: NPoco InsertBulk issue?
@@ -573,32 +568,32 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
// (same in PersistNewItem above)
// insert content variations
- Database.BulkInsertRecords(GetContentVariationDtos(content, publishing));
+ Database.BulkInsertRecords(GetContentVariationDtos(entity, publishing));
// insert document variations
- Database.BulkInsertRecords(GetDocumentVariationDtos(content, publishing, editedCultures));
+ Database.BulkInsertRecords(GetDocumentVariationDtos(entity, publishing, editedCultures));
}
// refresh content
- content.SetCultureEdited(editedCultures);
+ entity.SetCultureEdited(editedCultures);
// update the document dto
// at that point, when un/publishing, the entity still has its old Published value
// so we need to explicitly update the dto to persist the correct value
- if (content.PublishedState == PublishedState.Publishing)
+ if (entity.PublishedState == PublishedState.Publishing)
dto.Published = true;
- else if (content.PublishedState == PublishedState.Unpublishing)
+ else if (entity.PublishedState == PublishedState.Unpublishing)
dto.Published = false;
- content.Edited = dto.Edited = !dto.Published || edited; // if not published, always edited
+ entity.Edited = dto.Edited = !dto.Published || edited; // if not published, always edited
Database.Update(dto);
//update the schedule
- if (content.IsPropertyDirty("ContentSchedule"))
- PersistContentSchedule(content, true);
+ if (entity.IsPropertyDirty("ContentSchedule"))
+ PersistContentSchedule(entity, true);
// if entity is publishing, update tags, else leave tags there
// means that implicitly unpublished, or trashed, entities *still* have tags in db
- if (content.PublishedState == PublishedState.Publishing)
+ if (entity.PublishedState == PublishedState.Publishing)
SetEntityTags(entity, _tagRepository);
// trigger here, before we reset Published etc
@@ -606,23 +601,23 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
// flip the entity's published property
// this also flips its published state
- if (content.PublishedState == PublishedState.Publishing)
+ if (entity.PublishedState == PublishedState.Publishing)
{
- content.Published = true;
- content.PublishTemplateId = content.TemplateId;
- content.PublisherId = content.WriterId;
- content.PublishName = content.Name;
- content.PublishDate = content.UpdateDate;
+ entity.Published = true;
+ entity.PublishTemplateId = entity.TemplateId;
+ entity.PublisherId = entity.WriterId;
+ entity.PublishName = entity.Name;
+ entity.PublishDate = entity.UpdateDate;
SetEntityTags(entity, _tagRepository);
}
- else if (content.PublishedState == PublishedState.Unpublishing)
+ else if (entity.PublishedState == PublishedState.Unpublishing)
{
- content.Published = false;
- content.PublishTemplateId = null;
- content.PublisherId = null;
- content.PublishName = null;
- content.PublishDate = null;
+ entity.Published = false;
+ entity.PublishTemplateId = null;
+ entity.PublisherId = null;
+ entity.PublishName = null;
+ entity.PublishDate = null;
ClearEntityTags(entity, _tagRepository);
}
@@ -1338,7 +1333,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
#region Utilities
- private void SanitizeNames(Content content, bool publishing)
+ private void SanitizeNames(IContent content, bool publishing)
{
// a content item *must* have an invariant name, and invariant published name
// else we just cannot write the invariant rows (node, content version...) to the database
@@ -1403,7 +1398,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
x.NodeId != SqlTemplate.Arg("id"))
.OrderBy(x => x.LanguageId));
- private void EnsureVariantNamesAreUnique(Content content, bool publishing)
+ private void EnsureVariantNamesAreUnique(IContent content, bool publishing)
{
if (!EnsureUniqueNaming || !content.ContentType.VariesByCulture() || content.CultureInfos.Count == 0) return;
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/DomainRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/DomainRepository.cs
index 69523a860a..9aa28fb18a 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/DomainRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/DomainRepository.cs
@@ -6,6 +6,7 @@ using NPoco;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
+using Umbraco.Core.Models.Entities;
using Umbraco.Core.Persistence.Dtos;
using Umbraco.Core.Persistence.Querying;
using Umbraco.Core.Scoping;
@@ -101,7 +102,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
if (languageExists == 0) throw new NullReferenceException("No language exists with id " + entity.LanguageId.Value);
}
- ((UmbracoDomain)entity).AddingEntity();
+ entity.AddingEntity();
var factory = new DomainModelFactory();
var dto = factory.BuildDto(entity);
@@ -120,7 +121,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistUpdatedItem(IDomain entity)
{
- ((UmbracoDomain)entity).UpdatingEntity();
+ entity.UpdatingEntity();
var exists = Database.ExecuteScalar("SELECT COUNT(*) FROM umbracoDomain WHERE domainName = @domainName AND umbracoDomain.id <> @id",
new { domainName = entity.DomainName, id = entity.Id });
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/ExternalLoginRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/ExternalLoginRepository.cs
index 0fa48e5521..f708590ea8 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/ExternalLoginRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/ExternalLoginRepository.cs
@@ -139,7 +139,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistNewItem(IIdentityUserLogin entity)
{
- ((EntityBase)entity).AddingEntity();
+ entity.AddingEntity();
var dto = ExternalLoginFactory.BuildDto(entity);
@@ -151,7 +151,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistUpdatedItem(IIdentityUserLogin entity)
{
- ((EntityBase)entity).UpdatingEntity();
+ entity.UpdatingEntity();
var dto = ExternalLoginFactory.BuildDto(entity);
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/LanguageRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/LanguageRepository.cs
index 5a62c25df7..8429532b01 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/LanguageRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/LanguageRepository.cs
@@ -129,7 +129,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
if (entity.IsoCode.IsNullOrWhiteSpace() || entity.CultureName.IsNullOrWhiteSpace())
throw new InvalidOperationException("Cannot save a language without an ISO code and a culture name.");
- ((EntityBase) entity).AddingEntity();
+ entity.AddingEntity();
// deal with entity becoming the new default entity
if (entity.IsDefault)
@@ -156,7 +156,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
if (entity.IsoCode.IsNullOrWhiteSpace() || entity.CultureName.IsNullOrWhiteSpace())
throw new InvalidOperationException("Cannot save a language without an ISO code and a culture name.");
- ((EntityBase) entity).UpdatingEntity();
+ entity.UpdatingEntity();
if (entity.IsDefault)
{
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/MacroRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/MacroRepository.cs
index 565917e078..f0044e225d 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/MacroRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/MacroRepository.cs
@@ -132,7 +132,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistNewItem(IMacro entity)
{
- ((EntityBase)entity).AddingEntity();
+ entity.AddingEntity();
var dto = MacroFactory.BuildDto(entity);
@@ -152,7 +152,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistUpdatedItem(IMacro entity)
{
- ((EntityBase)entity).UpdatingEntity();
+ entity.UpdatingEntity();
;
var dto = MacroFactory.BuildDto(entity);
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/MediaRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/MediaRepository.cs
index 65043c4c67..25828b8126 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/MediaRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/MediaRepository.cs
@@ -8,6 +8,7 @@ using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.Exceptions;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
+using Umbraco.Core.Models.Entities;
using Umbraco.Core.Persistence.Dtos;
using Umbraco.Core.Persistence.Factories;
using Umbraco.Core.Persistence.Querying;
@@ -217,7 +218,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistNewItem(IMedia entity)
{
var media = (Models.Media) entity;
- media.AddingEntity();
+ entity.AddingEntity();
// ensure unique name on the same level
entity.Name = EnsureUniqueNodeName(entity.ParentId, entity.Name);
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/MediaTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/MediaTypeRepository.cs
index 281255e755..1abc75cf3a 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/MediaTypeRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/MediaTypeRepository.cs
@@ -5,6 +5,7 @@ using NPoco;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
+using Umbraco.Core.Models.Entities;
using Umbraco.Core.Persistence.Dtos;
using Umbraco.Core.Persistence.Querying;
using Umbraco.Core.Scoping;
@@ -102,7 +103,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistNewItem(IMediaType entity)
{
- ((MediaType)entity).AddingEntity();
+ entity.AddingEntity();
PersistNewBaseContentType(entity);
@@ -114,7 +115,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
ValidateAlias(entity);
//Updates Modified date
- ((MediaType)entity).UpdatingEntity();
+ entity.UpdatingEntity();
//Look up parent to get and set the correct Path if ParentId has changed
if (entity.IsPropertyDirty("ParentId"))
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/MemberGroupRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/MemberGroupRepository.cs
index ff7a79f98e..c138550de5 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/MemberGroupRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/MemberGroupRepository.cs
@@ -6,6 +6,7 @@ using Umbraco.Core.Cache;
using Umbraco.Core.Events;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
+using Umbraco.Core.Models.Entities;
using Umbraco.Core.Persistence.Dtos;
using Umbraco.Core.Persistence.Factories;
using Umbraco.Core.Persistence.Querying;
@@ -91,8 +92,8 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistNewItem(IMemberGroup entity)
{
//Save to db
+ entity.AddingEntity();
var group = (MemberGroup)entity;
- group.AddingEntity();
var dto = MemberGroupFactory.BuildDto(group);
var o = Database.IsNew(dto) ? Convert.ToInt32(Database.Insert(dto)) : Database.Update(dto);
group.Id = dto.NodeId; //Set Id on entity to ensure an Id is set
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/MemberRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/MemberRepository.cs
index 808f61305a..1fc3568fc0 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/MemberRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/MemberRepository.cs
@@ -6,6 +6,7 @@ using NPoco;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
+using Umbraco.Core.Models.Entities;
using Umbraco.Core.Persistence.Dtos;
using Umbraco.Core.Persistence.Factories;
using Umbraco.Core.Persistence.Querying;
@@ -232,8 +233,13 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistNewItem(IMember entity)
{
+ if (entity.ProviderUserKey == null)
+ {
+ entity.ProviderUserKey = entity.Key;
+ }
+ entity.AddingEntity();
+
var member = (Member) entity;
- member.AddingEntity();
// ensure that strings don't contain characters that are invalid in xml
// TODO: do we really want to keep doing this here?
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/MemberTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/MemberTypeRepository.cs
index ecc0b73ed8..61981a42e3 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/MemberTypeRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/MemberTypeRepository.cs
@@ -5,6 +5,7 @@ using NPoco;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
+using Umbraco.Core.Models.Entities;
using Umbraco.Core.Persistence.Dtos;
using Umbraco.Core.Persistence.Factories;
using Umbraco.Core.Persistence.Querying;
@@ -131,7 +132,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
{
ValidateAlias(entity);
- ((MemberType)entity).AddingEntity();
+ entity.AddingEntity();
//set a default icon if one is not specified
if (entity.Icon.IsNullOrWhiteSpace())
@@ -165,7 +166,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
ValidateAlias(entity);
//Updates Modified date
- ((MemberType)entity).UpdatingEntity();
+ entity.UpdatingEntity();
//Look up parent to get and set the correct Path if ParentId has changed
if (entity.IsPropertyDirty("ParentId"))
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/PublicAccessRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/PublicAccessRepository.cs
index bd2580b38f..1dc7aa478d 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/PublicAccessRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/PublicAccessRepository.cs
@@ -5,6 +5,7 @@ using NPoco;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
+using Umbraco.Core.Models.Entities;
using Umbraco.Core.Persistence.Dtos;
using Umbraco.Core.Persistence.Factories;
using Umbraco.Core.Persistence.Querying;
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/RelationRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/RelationRepository.cs
index c5ba24f385..4b4af505b8 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/RelationRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/RelationRepository.cs
@@ -134,7 +134,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistNewItem(IRelation entity)
{
- ((EntityBase)entity).AddingEntity();
+ entity.AddingEntity();
var factory = new RelationFactory(entity.RelationType);
var dto = factory.BuildDto(entity);
@@ -147,7 +147,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistUpdatedItem(IRelation entity)
{
- ((EntityBase)entity).UpdatingEntity();
+ entity.UpdatingEntity();
var factory = new RelationFactory(entity.RelationType);
var dto = factory.BuildDto(entity);
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/RelationTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/RelationTypeRepository.cs
index 4faf78bd0a..075d4aa769 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/RelationTypeRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/RelationTypeRepository.cs
@@ -133,7 +133,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistNewItem(IRelationType entity)
{
- ((EntityBase)entity).AddingEntity();
+ entity.AddingEntity();
var dto = RelationTypeFactory.BuildDto(entity);
@@ -145,7 +145,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistUpdatedItem(IRelationType entity)
{
- ((EntityBase)entity).UpdatingEntity();
+ entity.UpdatingEntity();
var dto = RelationTypeFactory.BuildDto(entity);
Database.Update(dto);
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/ServerRegistrationRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/ServerRegistrationRepository.cs
index 6b2dfddaeb..1497c2857c 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/ServerRegistrationRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/ServerRegistrationRepository.cs
@@ -5,6 +5,7 @@ using NPoco;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
+using Umbraco.Core.Models.Entities;
using Umbraco.Core.Persistence.Dtos;
using Umbraco.Core.Persistence.Factories;
using Umbraco.Core.Persistence.Querying;
@@ -96,7 +97,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistNewItem(IServerRegistration entity)
{
- ((ServerRegistration)entity).AddingEntity();
+ entity.AddingEntity();
var dto = ServerRegistrationFactory.BuildDto(entity);
@@ -108,7 +109,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistUpdatedItem(IServerRegistration entity)
{
- ((ServerRegistration)entity).UpdatingEntity();
+ entity.UpdatingEntity();
var dto = ServerRegistrationFactory.BuildDto(entity);
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/TagRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/TagRepository.cs
index f26fcca81b..279e03b19e 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/TagRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/TagRepository.cs
@@ -85,7 +85,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
///
protected override void PersistNewItem(ITag entity)
{
- ((EntityBase)entity).AddingEntity();
+ entity.AddingEntity();
var dto = TagFactory.BuildDto(entity);
var id = Convert.ToInt32(Database.Insert(dto));
@@ -97,7 +97,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
///
protected override void PersistUpdatedItem(ITag entity)
{
- ((EntityBase)entity).UpdatingEntity();
+ entity.UpdatingEntity();
var dto = TagFactory.BuildDto(entity);
Database.Update(dto);
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/UserGroupRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/UserGroupRepository.cs
index 3b247950e4..0701a0996e 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/UserGroupRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/UserGroupRepository.cs
@@ -290,7 +290,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistNewItem(IUserGroup entity)
{
- ((UserGroup) entity).AddingEntity();
+ entity.AddingEntity();
var userGroupDto = UserGroupFactory.BuildDto(entity);
@@ -304,7 +304,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
protected override void PersistUpdatedItem(IUserGroup entity)
{
- ((UserGroup) entity).UpdatingEntity();
+ entity.UpdatingEntity();
var userGroupDto = UserGroupFactory.BuildDto(entity);
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/UserRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/UserRepository.cs
index 91a20c5bdd..96abc37662 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/UserRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/UserRepository.cs
@@ -445,7 +445,7 @@ ORDER BY colName";
return;
}
- ((User) entity).AddingEntity();
+ entity.AddingEntity();
// ensure security stamp if missing
if (entity.SecurityStamp.IsNullOrWhiteSpace())
@@ -495,7 +495,7 @@ ORDER BY colName";
protected override void PersistUpdatedItem(IUser entity)
{
// updates Modified date
- ((User) entity).UpdatingEntity();
+ entity.UpdatingEntity();
// ensure security stamp if missing
if (entity.SecurityStamp.IsNullOrWhiteSpace())
diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj
index 7ac1e9d06e..343043ea36 100755
--- a/src/Umbraco.Core/Umbraco.Core.csproj
+++ b/src/Umbraco.Core/Umbraco.Core.csproj
@@ -234,6 +234,7 @@
+