private ProfileNodeVM CreateNodeVM(ProfileNodeDO profileNode) { return new ProfileNodeVM { Id = profileNode.Id, Label = profileNode.Name, Items = profileNode.ProfileItems.Select(pi => new ProfileNodeItemVM { Id = pi.Id, ItemName = pi.Key, ItemValue = pi.Value }).ToList(), Children = profileNode.ChildNodes.Select(CreateNodeVM).ToList() }; }
private void CreateNewNodes(IUnitOfWork uow, int profileID, ProfileNodeDO parentProfileNodeDO, IEnumerable<ProfileVM.ProfileNodeVM> nodes) { foreach (var node in nodes) { ProfileNodeDO nodeDO; if (node.Id == 0) { nodeDO = new ProfileNodeDO(); uow.ProfileNodeRepository.Add(nodeDO); } else { nodeDO = uow.ProfileNodeRepository.GetByKey(node.Id); } nodeDO.ProfileID = profileID; nodeDO.Name = node.Label; //Add profile items.. if (node.Items != null) { HashSet<int> currentItems = new HashSet<int>(); foreach (var item in node.Items) { ProfileItemDO profileItemDO; if (item.Id == 0) { profileItemDO = new ProfileItemDO(); uow.ProfileItemRepository.Add(profileItemDO); } else { profileItemDO = uow.ProfileItemRepository.GetByKey(item.Id); } profileItemDO.ProfileNode = nodeDO; profileItemDO.Key = item.ItemName; profileItemDO.Value = item.ItemValue; currentItems.Add(item.Id); } var rowsToDelete = uow.ProfileItemRepository.GetQuery().Where(pi => !currentItems.Where(a => a != 0).Contains(pi.Id)).ToList(); foreach(var rowToDelete in rowsToDelete) uow.ProfileItemRepository.Remove(rowToDelete); } else { var rowsToDelete = uow.ProfileItemRepository.GetQuery().Where(pi => pi.ProfileNodeID == nodeDO.Id).ToList(); foreach (var rowToDelete in rowsToDelete) uow.ProfileItemRepository.Remove(rowToDelete); } nodeDO.ParentNode = parentProfileNodeDO; if (node.Children != null) { CreateNewNodes(uow, profileID, nodeDO, node.Children); } } }