public async Task <Project> UpdateProjectAsync(ProjectServiceModel serviceModel) { var project = await GetProjects().SingleAsync(o => o.Id == serviceModel.Id); var newProject = serviceModel.ToEntity(); _context.Entry(project).CurrentValues.SetValues(newProject); _context.Entry(project).Property(o => o.CreateByUserId).IsModified = false; _context.Entry(project).Property(o => o.CreateDate).IsModified = false; project.CityId = newProject.CityId; foreach (var newDetail in newProject.ProjectDetails) { var oldDetail = project.ProjectDetails.FirstOrDefault(o => o.Language == newDetail.Language); if (oldDetail.Language == newDetail.Language) { newDetail.Id = oldDetail.Id; _context.Entry(oldDetail).CurrentValues.SetValues(newDetail); } } _context.TryUpdateProjectBlocks(project.ProjectBlocks, serviceModel.ProjectBlocks, o => o.Id); _context.TryUpdateManyToMany(project.EnitityFiles, newProject.EnitityFiles, o => o.FileEntityId); _context.TryUpdateManyToMany(project.EntityTaxonomies, newProject.EntityTaxonomies, o => o.TaxonomyId); await _context.SaveChangesAsync(); return(newProject); }
public async Task <Project> UpdateProjectAsync(ProjectServiceModel serviceModel) { var project = await GetProjects().SingleAsync(o => o.Id == serviceModel.Id); var newProject = serviceModel.ToEntity(); _context.Entry(project).CurrentValues.SetValues(newProject); _context.Entry(project).Property(o => o.CreateByUserId).IsModified = false; _context.Entry(project).Property(o => o.CreateDate).IsModified = false; project.CityId = newProject.CityId; foreach (var newDetail in newProject.Details) { var oldDetail = project.Details.FirstOrDefault(o => o.Language == newDetail.Language); if (oldDetail.Language == newDetail.Language) { newDetail.Id = oldDetail.Id; _context.Entry(oldDetail).CurrentValues.SetValues(newDetail); } } _context.TryUpdateProjectBlocks(project.ProjectBlocks, serviceModel.ProjectBlocks, o => o.Id); var packageSet = _context.Set <Package>(); foreach (var roomtype in project.ProjectBlocks) { foreach (var roomLayout in roomtype.Children) { foreach (var roomPerspective in roomLayout.Children) { if (roomPerspective.PackageId != default) { var package = packageSet.Find(roomPerspective.PackageId); var entry = _context.Entry(package); entry.Property(o => o.ProjectBlockId).CurrentValue = roomPerspective.Id; } } } } _context.TryUpdateManyToMany(project.EntityFiles, newProject.EntityFiles, o => o.FileEntityId); _context.TryUpdateManyToMany(project.EntityTaxonomies, newProject.EntityTaxonomies, o => o.TaxonomyId); await _context.SaveChangesAsync(); return(newProject); }
public static void TryUpdateProjectBlocks <TKey>(this HomeBuilderDbContext context, IEnumerable <ProjectBlock> currentEntities, IEnumerable <ProjectBlock> newEntities, Func <ProjectBlock, TKey> getKey) { var dbSet = context.Set <ProjectBlock>(); var deletedEntities = currentEntities.Except(newEntities, getKey); dbSet.RemoveRange(deletedEntities); var addedEntities = newEntities.Except(currentEntities, getKey); if (addedEntities.Count() != 0) { dbSet.AddRange(addedEntities); } var modifiedEntities = newEntities.Where(o => o.Id > 0); foreach (var entity in modifiedEntities) { var existingItem = currentEntities.FirstOrDefault(o => o.Id == entity.Id); var entityEntry = context.Entry(existingItem); entityEntry.CurrentValues.SetValues(entity); entityEntry.Property(o => o.ParentId).IsModified = false; if (entityEntry.Entity.Children.Count() != 0 || entity.Children.Count() != 0) { foreach (var child in entity.Children) { child.ParentId = entityEntry.Entity.Id; } context.TryUpdateProjectBlocks(entityEntry.Entity.Children, entity.Children, getKey); } context.TryUpdateManyToMany(existingItem.ProjectBlockFiles, entity.ProjectBlockFiles, o => o.FileEntityId); foreach (var newDetail in entity.ProjectBlockDetails) { var oldDetail = entityEntry.Entity.ProjectBlockDetails.FirstOrDefault(o => o.Language == newDetail.Language); if (oldDetail.Language == newDetail.Language) { newDetail.Id = oldDetail.Id; context.Entry(oldDetail).CurrentValues.SetValues(newDetail); } } } }