public async Task <Package> UpdatePackageAsync(PackageServiceModel serviceModel) { var package = await GetPackages().SingleAsync(o => o.Id == serviceModel.Id); var newPackage = serviceModel.ToEntity(); _context.Entry(package).CurrentValues.SetValues(newPackage); _context.Entry(package).Property(o => o.CreateByUserId).IsModified = false; _context.Entry(package).Property(o => o.CreateDate).IsModified = false; foreach (var newDetail in newPackage.PackageDetails) { var oldDetail = package.PackageDetails.FirstOrDefault(o => o.Language == newDetail.Language); if (oldDetail.Language == newDetail.Language) { newDetail.Id = oldDetail.Id; _context.Entry(oldDetail).CurrentValues.SetValues(newDetail); } } _context.TryUpdateManyToMany(package.EnitityFiles, newPackage.EnitityFiles, o => o.FileEntityId); _context.TryUpdateManyToMany(package.EntityTaxonomies, newPackage.EntityTaxonomies, o => o.TaxonomyId); await _context.SaveChangesAsync(); return(newPackage); }
public async Task <Package> UpdatePackageAsync(PackageServiceModel serviceModel) { var package = await GetPackages().SingleAsync(o => o.Id == serviceModel.Id); var newPackage = serviceModel.ToEntity(); _context.Entry(package).CurrentValues.SetValues(newPackage); _context.Entry(package).Property(o => o.Name).IsModified = false; _context.Entry(package).Property(o => o.CreateByUserId).IsModified = false; _context.Entry(package).Property(o => o.CreateDate).IsModified = false; foreach (var newDetail in newPackage.Details) { var oldDetail = package.Details.FirstOrDefault(o => o.Language == newDetail.Language); if (oldDetail.Language == newDetail.Language) { newDetail.Id = oldDetail.Id; _context.Entry(oldDetail).CurrentValues.SetValues(newDetail); } } _context.TryUpdateManyToMany(package.EntityFiles, newPackage.EntityFiles, o => o.FileEntityId); _context.TryUpdateManyToMany(package.EntityTaxonomies, newPackage.EntityTaxonomies, o => o.TaxonomyId); _context.TryUpdateManyToMany(package.EntityProducts, newPackage.EntityProducts, o => o.ProductId); foreach (var entityProduct in package.EntityProducts) { var pdEntry = _context.Entry(entityProduct); if (pdEntry.State == EntityState.Deleted) { continue; } pdEntry.Property(o => o.Quantity).CurrentValue = newPackage.EntityProducts.FirstOrDefault(o => o.ProductId == entityProduct.ProductId).Quantity; } await _context.SaveChangesAsync(); return(newPackage); }