public IHttpActionResult PutPacote(int id, Pacote pacote) { if (!ModelState.IsValid) { return BadRequest(ModelState); } if (id != pacote.IdPacote) { return BadRequest(); } var pacoteDb = db.Pacote.Find(id); db.Entry(pacoteDb).State = EntityState.Modified; if (pacoteDb.Produto.Any()) { pacoteDb.Nome = pacote.Nome; pacoteDb.Descricao = pacote.Descricao; pacoteDb.Duracao = pacote.Duracao; pacoteDb.Valor = pacote.Valor; //produtos novos var produtosNovos = pacote.Produto.Where(produto => !pacoteDb.Produto.Select(p => p.IdProduto).Contains(produto.IdProduto)).ToList(); produtosNovos.ForEach(produto => { var produtoDb = db.Produto.Find(produto.IdProduto); pacoteDb.Produto.Add(produtoDb); }); //produtos excluidos var produtosExcluidos = pacoteDb.Produto.Where(produtoOriginal => !pacote.Produto.Select(p => p.IdProduto).Contains(produtoOriginal.IdProduto)).ToList(); produtosExcluidos.ForEach(produto => pacoteDb.Produto.Remove(produto)); } else { if (pacote.Produto.Any()) pacote.Produto.ToList().ForEach(produto => { var produtoDb = db.Produto.Find(produto.IdProduto); pacoteDb.Produto.Add(produtoDb); }); } try { db.SaveChanges(); } catch (DbUpdateConcurrencyException) { if (!PacoteExists(id)) { return NotFound(); } else { throw; } } return StatusCode(HttpStatusCode.NoContent); }
public IHttpActionResult PostPacote(Pacote pacote) { if (!ModelState.IsValid) { return BadRequest(ModelState); } pacote.Produto.ForEach(produto => db.Entry(produto).State = EntityState.Unchanged); db.Pacote.Add(pacote); db.SaveChanges(); return CreatedAtRoute("DefaultApi", new { id = pacote.IdPacote }, pacote); }