public ActionResult Create(CreateAgenteViewModel model)
        {
            // ModelState.IsValid --> confronta os dados fornecidos com o modelo
            // se não respeitar as regras do modelo, rejeita os dados
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var agente = new Agentes
            {
                ID       = db.GetIdAgente(),
                Nome     = model.Nome,
                Esquadra = model.Esquadra
            };

            //    verificar se o ficheiro é realmente uma imagem ---> Ver a classe "CreateAgenteViewModel"
            //    redimensionar a imagem --> ver em casa (pode ser feito com validação custom)

            // var. auxiliar
            string nomeFotografia        = "Agente_" + agente.ID + Path.GetExtension(model.Fotografia.FileName);
            string caminhoParaFotografia = Path.Combine(Server.MapPath("~/imagens/"), nomeFotografia); // indica onde a imagem será guardada

            // guardar o nome da imagem na BD
            agente.Fotografia = nomeFotografia;

            try
            {
                // guardar a imagem no disco rígido
                model.Fotografia.SaveAs(caminhoParaFotografia);

                // adiciona na estrutura de dados, na memória do servidor,
                // o objeto Agentes
                db.Agentes.Add(agente);
                // faz 'commit' na BD
                db.SaveChanges();

                // redireciona o utilizador para a página de início
                return(RedirectToAction("Index"));
            }
            catch (Exception)
            {
                // gerar uma mensagem de erro para o utilizador
                ModelState.AddModelError("", "Ocorreu um erro não determinado na criação do novo Agente...");
            }

            // se se chegar aqui, é pq aconteceu algum problema...
            // devolve os dados do agente à View
            return(View(agente));
        }
        public IHttpActionResult PostAgentes(PostAgenteViewModel model)
        {
            if (!ModelState.IsValid)
            {
                // O BadRequest permite usar o ModelState
                // para informar o cliente dos erros de validação
                // tal como no MVC.
                return(BadRequest(ModelState));
            }

            // Copiar os campos do 'model' para um novo objeto de 'Agentes'.
            // Definir o ID do agente (F12 sobre "GetAgente()")
            // Isto é garantido que funcione, seja para uma operação, seja para múltiplas
            // em simultâneo (ex: muitas pessoas a aceder ao site/API), ao contrário
            // do método db.Agentes.Max(agente => agente.ID) + 1, que NÃO É ATÓMICO,
            // e abre a possibilidade de crashes ou erros de consistência
            // (tema de Sistemas Distribuidos)
            // Ver a migração Migrations/201804251626256_SequenciaIdAgentes.cs
            var agentes = new Agentes
            {
                ID       = db.GetIdAgente(),
                Nome     = model.Nome,
                Esquadra = model.Esquadra
            };

            db.Agentes.Add(agentes);

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateException)
            {
                // Seria muito provável que o método
                // db.Agentes.Max(agente => agente.ID) + 1
                // fizesse com que este if resultasse no Conflict (HTTP 409).
                if (AgentesExists(agentes.ID))
                {
                    return(Conflict());
                }
                else
                {
                    throw;
                }
            }

            // Num create, é boa prática devolver uma representação
            // do resultado da criação do objeto na base de dados.
            return(CreatedAtRoute("DefaultApi", new { id = agentes.ID }, agentes));
        }
        public IHttpActionResult PostAgentes(PostAgenteViewModel model)
        {
            if (!ModelState.IsValid)
            {
                // O BadRequest permite usar o ModelState
                // para informar o cliente dos erros de validação
                // tal como no MVC.
                return(BadRequest(ModelState));
            }

            var agentes = new Agentes
            {
                ID       = db.GetIdAgente(),
                Nome     = model.Nome,
                Esquadra = model.Esquadra
            };

            db.Agentes.Add(agentes);

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateException)
            {
                // Seria muito provável que o método
                // db.Agentes.Max(agente => agente.ID) + 1
                // fizesse com que este if resultasse no Conflict (HTTP 409).
                if (AgentesExists(agentes.ID))
                {
                    return(Conflict());
                }
                else
                {
                    throw;
                }
            }

            // Num create, é boa prática devolver uma representação
            // do resultado da criação do objeto na base de dados.
            return(CreatedAtRoute("DefaultApi", new { id = agentes.ID }, agentes));
        }