private void MapSiteResourceToDao(SiteResource resource, SiteDao siteDao) { if (resource.Pages == null) { resource.Pages = new List <PageResource>(); } siteDao.Domain = resource.Domain; siteDao.IsEnabled = resource.IsEnabled; siteDao.MaintainCountryList(_dataContext, resource.Countries); var incomingPaths = resource.Pages.ToDictionary(p => p.Path); var currentPaths = siteDao.Pages.ToDictionary(p => p.Path); var newPaths = incomingPaths.Keys.Except(currentPaths.Keys).ToList(); var deletedPaths = currentPaths.Keys.Except(incomingPaths.Keys).ToList(); var commonPaths = currentPaths.Keys.Intersect(incomingPaths.Keys).ToList(); foreach (var p in newPaths) { var dao = new PageDao(); MapPageResourceToDao(incomingPaths[p], dao); siteDao.Pages.Add(dao); } foreach (var p in deletedPaths) { siteDao.Pages.Remove(currentPaths[p]); } foreach (var p in commonPaths) { var currentPage = currentPaths[p]; var pageresource = incomingPaths[p]; MapPageResourceToDao(pageresource, currentPage); } }