private void Merge(DataModel.Introduction dbItem, IEnumerable <ExternalUrl> newExternalUrls) { if (newExternalUrls == null) { newExternalUrls = new List <ExternalUrl>(); } var toRemove = dbItem.ExternalUrls.Where(eu => !newExternalUrls.Any(x => eu.ExternalUrlId == x.Id)).ToList(); foreach (var item in toRemove) { dbItem.ExternalUrls.Remove(item); _context.ExternalUrls.Remove(item.ExternalUrl); _context.IntroductionExternalUrls.Remove(item); } var toAdd = newExternalUrls.Where(x => x.Id == null); foreach (var item in toAdd) { dbItem.ExternalUrls.Add(AbstractionsConverter.ToIntroductionExternalUrl(item)); } var toUpdate = newExternalUrls.Where(x => x.Id.HasValue); foreach (var item in toUpdate) { var upd = dbItem.ExternalUrls.FirstOrDefault(x => x.ExternalUrlId == item.Id.Value); upd.ExternalUrl.DisplayName = item.DisplayName; upd.ExternalUrl.Url = item.Url; upd.ExternalUrl.Version++; } }
private async Task <Account> CreateAsync(Account item) { CheckBeforeCreate(item); var hashedPassword = _hashManager.Hash(item.Password); var account = AbstractionsConverter.ToAccount(item, hashedPassword); await _context.Accounts.AddAsync(account); await _context.SaveChangesAsync(); return(DataConverter.ToAccount(account)); }
private async Task <Category> CreateAsync(Category category) { CheckBeforeCreate(category); var dbItem = AbstractionsConverter.ToCategory(category); await _context.Categories.AddAsync(dbItem); await _context.SaveChangesAsync(); var categoryWithProject = await _context.CategoriesWithTotalProjects.FirstOrDefaultAsync(x => x.Id == dbItem.Id); return(DataConverter.ToCategory(categoryWithProject)); }
private void Merge(DataModel.Project dbProject, IEnumerable <ExternalUrl> externalUrls) { foreach (var item in dbProject.ExternalUrls ?? new List <DataModel.ProjectExternalUrl>()) { var remoteItem = externalUrls?.FirstOrDefault(x => x.Id.HasValue && x.Id == item.ExternalUrlId); if (remoteItem == null) { _context.ExternalUrls.Remove(item.ExternalUrl); } else { item.ExternalUrl.DisplayName = remoteItem.DisplayName; item.ExternalUrl.Url = remoteItem.Url; item.ExternalUrl.Version++; } } foreach (var item in externalUrls?.Where(x => x.Id == null) ?? new List <ExternalUrl>()) { dbProject.ExternalUrls.Add(AbstractionsConverter.ToProjectExternalUrl(item)); } }
private void Merge(DataModel.Project dbProject, IEnumerable <GalleryImage> galleryImages) { foreach (var item in dbProject.GalleryImages ?? new List <DataModel.GalleryImage>()) { var remoteItem = galleryImages?.FirstOrDefault(x => x.Id.HasValue && x.Id == item.Id); if (remoteItem == null) { _context.GalleryImages.Remove(item); } else { item.ExtraUrl = remoteItem.ExtraUrl; item.ImageUrl = remoteItem.ImageUrl; item.Version++; } } foreach (var item in galleryImages?.Where(x => x.Id == null) ?? new List <GalleryImage>()) { dbProject.GalleryImages.Add(AbstractionsConverter.ToGalleryImage(item)); } }
private async Task <Project> CreateAsync(Project project) { CheckBeforeCreate(project); var dbItem = AbstractionsConverter.ToProject(project); await _context.Projects.AddAsync(dbItem); await _context.SaveChangesAsync(); var result = await _context.Projects .AsNoTracking() .Include(x => x.Category) .Include(x => x.GalleryImages) .Include(x => x.ExternalUrls) .ThenInclude(x => x.ExternalUrl) .FirstOrDefaultAsync(x => x.Id == dbItem.Id); if (result == null) { throw new InconsistencyException(Resources.TextMessages.ProjectDoesNotExist); } return(DataConverter.ToProject(result)); }