public static string UpdatePropertyTypesAndGroupsDo(Database database) { if (database != null) { //Fetch all PropertyTypes that belongs to a PropertyTypeGroup var propertyTypes = database.Fetch<PropertyTypeDto>("WHERE propertyTypeGroupId > 0"); var propertyGroups = database.Fetch<PropertyTypeGroupDto>("WHERE id > 0"); foreach (var propertyType in propertyTypes) { //Get the PropertyTypeGroup that the current PropertyType references var parentPropertyTypeGroup = propertyGroups.FirstOrDefault(x => x.Id == propertyType.PropertyTypeGroupId); if (parentPropertyTypeGroup != null) { //If the ContentType is the same on the PropertyType and the PropertyTypeGroup the group is valid and we skip to the next if (parentPropertyTypeGroup.ContentTypeNodeId == propertyType.ContentTypeId) continue; //Check if the 'new' PropertyTypeGroup has already been created var existingPropertyTypeGroup = propertyGroups.FirstOrDefault( x => x.ParentGroupId == parentPropertyTypeGroup.Id && x.Text == parentPropertyTypeGroup.Text && x.ContentTypeNodeId == propertyType.ContentTypeId); //This should ensure that we don't create duplicate groups for a single ContentType if (existingPropertyTypeGroup == null) { //Create a new PropertyTypeGroup that references the parent group that the PropertyType was referencing pre-6.0.1 var propertyGroup = new PropertyTypeGroupDto { ContentTypeNodeId = propertyType.ContentTypeId, ParentGroupId = parentPropertyTypeGroup.Id, Text = parentPropertyTypeGroup.Text, SortOrder = parentPropertyTypeGroup.SortOrder }; //Save the PropertyTypeGroup in the database and update the list of groups with this new group int id = Convert.ToInt16(database.Insert(propertyGroup)); propertyGroup.Id = id; propertyGroups.Add(propertyGroup); //Update the reference to the new PropertyTypeGroup on the current PropertyType propertyType.PropertyTypeGroupId = id; database.Update(propertyType); } else { //Update the reference to the existing PropertyTypeGroup on the current PropertyType propertyType.PropertyTypeGroupId = existingPropertyTypeGroup.Id; database.Update(propertyType); } } } } return string.Empty; }
internal PropertyTypeGroupDto Map(PropertyTypeGroupDto a, PropertyTypeDto p, DataTypeDto d) { // Terminating call. Since we can return null from this function // we need to be ready for PetaPoco to callback later with null // parameters if (a == null) return current; //Set the PropertyTypeDto's DataTypeDto object if (p.DataTypeId == d.DataTypeId) p.DataTypeDto = d; // Is this the same Group as the current one we're processing if (current != null && current.Id == a.Id) { // Yes, just add this PropertyType to the current Group's collection of PropertyTypes current.PropertyTypeDtos.Add(p); // Return null to indicate we're not done with this Group yet return null; } // This is a different Group to the current one, or this is the // first time through and we don't have a Tab yet // Save the current Group var prev = current; // Setup the new current Group current = a; current.PropertyTypeDtos = new List<PropertyTypeDto>(); current.PropertyTypeDtos.Add(p); // Return the now populated previous Tab (or null if first time through) return prev; }