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."); }
/// <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); }