コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
                    }
                }
            }
        }