/// <summary> /// Override the delete method so that we can ensure that all related content type's are updated as part of the overall transaction /// </summary> /// <param name="entity"></param> public override void Delete(IDataTypeDefinition entity) { //Find ContentTypes using this IDataTypeDefinition on a PropertyType var query = Query <PropertyType> .Builder.Where(x => x.DataTypeDefinitionId == entity.Id); //TODO: Don't we need to be concerned about media and member types here too ? var contentTypes = _contentTypeRepository.GetByQuery(query); //Loop through the list of results and remove the PropertyTypes that references the DataTypeDefinition that is being deleted foreach (var contentType in contentTypes) { if (contentType == null) { continue; } foreach (var group in contentType.PropertyGroups) { var types = @group.PropertyTypes.Where(x => x.DataTypeDefinitionId == entity.Id).ToList(); foreach (var propertyType in types) { @group.PropertyTypes.Remove(propertyType); } } _contentTypeRepository.AddOrUpdate(contentType); } //call the base method to queue the deletion of this data type base.Delete(entity); }