Пример #1
0
        public void Clean()
        {
            AttributeValueService attributeValueService = new AttributeValueService(rockContext);
            var workflows = workflowService.Queryable().Where(w => w.WorkflowTypeId == WORKFLOW_TYPE_ID && w.ForeignId > 0);
            var j         = 0;

            foreach (var workflow in workflows)
            {
                foreach (WorkflowActivity activity in workflow.Activities)
                {
                    var activytAttributes = attributeValueService.Queryable("Attribute").Where(av => av.EntityId == activity.Id && av.Attribute.EntityTypeId == 116 && av.Attribute.EntityTypeQualifierValue == activity.ActivityTypeId.ToString());
                    attributeValueService.DeleteRange(activytAttributes);
                }
                var attributes = attributeValueService.Queryable("Attribute").Where(av => av.EntityId == workflow.Id && av.Attribute.EntityTypeId == 113 && av.Attribute.EntityTypeQualifierValue == WORKFLOW_TYPE_ID.ToString());
                attributeValueService.DeleteRange(attributes);
                workflowService.Delete(workflow);
                j++;
            }
            rockContext.SaveChanges();
            Console.WriteLine("Removed " + j + " Homebound Resident Workflows.");
        }
Пример #2
0
        /// <summary>
        /// Cleanups the orphaned attribute values for entity type
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        private int CleanupOrphanedAttributeValuesForEntityType <T>() where T : Rock.Data.Entity <T>, IHasAttributes, new()
        {
            int recordsDeleted = 0;

            using (RockContext rockContext = new RockContext())
            {
                var attributeValueService   = new AttributeValueService(rockContext);
                int?entityTypeId            = EntityTypeCache.GetId <T>();
                var entityIdsQuery          = new Service <T>(rockContext).Queryable().Select(a => a.Id);
                var orphanedAttributeValues = attributeValueService.Queryable().Where(a => a.EntityId.HasValue && a.Attribute.EntityTypeId == entityTypeId.Value && !entityIdsQuery.Contains(a.EntityId.Value)).ToList();
                if (orphanedAttributeValues.Any())
                {
                    recordsDeleted += orphanedAttributeValues.Count;
                    attributeValueService.DeleteRange(orphanedAttributeValues);
                    rockContext.SaveChanges();
                }
            }

            return(recordsDeleted);
        }