none
WEB API Controller - Inserindo informação em duas tabelas ao mesmo tempo e atribuindo mesmo id para ambas RRS feed

  • Pergunta

  • Boa tarde,

    Tenho uma tabela de pedido e outra tabela de produto, gerei 2 controllers para realização do CRUD porém não sei se é o certo. Minha dúvida é: Como faço para quando criar um pedido, a tabela de produto também seja criada mesmo que sem itens? E com o mesmo id para ambas? Segue código de uma controller, a outra é exatamente igual só mudando o nome.

    namespace RqtApi.Controllers
    {
        public class Rqt1Controller : ApiController
        {
            private RqtApiEntities db = new RqtApiEntities();
    
            // GET: api/Rqt1
            public IQueryable<BRWAPIRequest1> GetBRWAPIRequest1()
            {
                return db.BRWAPIRequest1;
            }
    
            // GET: api/Rqt1/5
            [ResponseType(typeof(BRWAPIRequest1))]
            public IHttpActionResult GetBRWAPIRequest1(int id)
            {
                BRWAPIRequest1 bRWAPIRequest1 = db.BRWAPIRequest1.Find(id);
                if (bRWAPIRequest1 == null)
                {
                    return NotFound();
                }
    
                return Ok(bRWAPIRequest1);
            }
    
            // PUT: api/Rqt1/5
            [ResponseType(typeof(void))]
            public IHttpActionResult PutBRWAPIRequest1(int id, BRWAPIRequest1 bRWAPIRequest1)
            {
                if (!ModelState.IsValid)
                {
                    return BadRequest(ModelState);
                }
    
                if (id != bRWAPIRequest1.DocEntry)
                {
                    return BadRequest();
                }
    
                db.Entry(bRWAPIRequest1).State = EntityState.Modified;
    
                try
                {
                    db.SaveChanges();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!BRWAPIRequest1Exists(id))
                    {
                        return NotFound();
                    }
                    else
                    {
                        throw;
                    }
                }
    
                return StatusCode(HttpStatusCode.NoContent);
            }
    
            // POST: api/Rqt1
            [ResponseType(typeof(BRWAPIRequest1))]
            public IHttpActionResult PostBRWAPIRequest1(BRWAPIRequest1 bRWAPIRequest1)
            {
                if (!ModelState.IsValid)
                {
                    return BadRequest(ModelState);
                }
    
                db.BRWAPIRequest1.Add(bRWAPIRequest1);
    
                try
                {
                    db.SaveChanges();
                }
                catch (DbUpdateException)
                {
                    if (BRWAPIRequest1Exists(bRWAPIRequest1.DocEntry))
                    {
                        return Conflict();
                    }
                    else
                    {
                        throw;
                    }
                }
    
                return CreatedAtRoute("DefaultApi", new { id = bRWAPIRequest1.DocEntry }, bRWAPIRequest1);
            }
    
            // DELETE: api/Rqt1/5
            [ResponseType(typeof(BRWAPIRequest1))]
            public IHttpActionResult DeleteBRWAPIRequest1(int id)
            {
                BRWAPIRequest1 bRWAPIRequest1 = db.BRWAPIRequest1.Find(id);
                if (bRWAPIRequest1 == null)
                {
                    return NotFound();
                }
    
                db.BRWAPIRequest1.Remove(bRWAPIRequest1);
                db.SaveChanges();
    
                return Ok(bRWAPIRequest1);
            }
    
            protected override void Dispose(bool disposing)
            {
                if (disposing)
                {
                    db.Dispose();
                }
                base.Dispose(disposing);
            }
    
            private bool BRWAPIRequest1Exists(int id)
            {
                return db.BRWAPIRequest1.Count(e => e.DocEntry == id) > 0;
            }
        }
    }

    quinta-feira, 31 de janeiro de 2019 16:27

Respostas

Todas as Respostas

  • Bom dia, Douglas. Tudo bem?

    Obrigado por usar o fórum MSDN.

    Essa seria uma questão de "How to/Customização" ou "Break Fix/Erro"?

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 1 de fevereiro de 2019 12:25
    Moderador
  • Olá Filipe,

    Seria uma questão de "How to/Customização", gostaria de saber como altero as querys que são geradas automaticamente para eu impor condições diferentes e assim poder pegar o id de outra tabela no insert desta.

    sexta-feira, 1 de fevereiro de 2019 19:27
  • Fiz algumas gambiarras para inserir ao mesmo tempo, usei querys SQL para inserção de ambas.

    Funcionou.

    • Marcado como Resposta Douglas Souza05 segunda-feira, 24 de junho de 2019 18:02
    segunda-feira, 24 de junho de 2019 18:02
  • Douglas, essa sua controller é somente um exemplo ou já é seu código final?

    Caso seja seu código final da uma lida sobre padrões de projetos, responsabilidade unica e etc. Não se deve fazer essa manipulação do BD direto na controller.

    E sempre lembre "uma gambiarra hoje, pode te custar um projeto todo amanhã".

    quinta-feira, 27 de junho de 2019 20:05
  • Bom dia Rafael,

    Era um exemplo apenas, estava aprendendo sobre a linguagem e algumas práticas, na resposta coloquei comandos SQL pois quando fiz realmente usei SQL, mas com o tempo aprendi que com EF é usado o LinQ e Entity SQL.

    Obrigado pelo aviso!

    segunda-feira, 1 de julho de 2019 14:11