none
Erro ao adicionar dados no Asp.net Mvc RRS feed

  • Pergunta

  • Bom Dia!

    Preciso pegar o maior id de uma tabela e somar com + 1 para criar um novo cadastro já que meu id não pode ser nulo e

     não é auto incrementado!Quando tento adicionar com o SaveChanges eu tenho um erro que diz que o meu id é nulo,alguém poderia me ajudar?

    Segue meu codigo abaixo:

        public class CadRepository 
        {
            
            private MeuContexto contexto = new MeuContexto();
    
            public List<Cad> Lista()
            {
                return contexto.Cad.ToList();
            }
    
            public void Adiciona(Cad c)
            {
                contexto.Cad.Add(c);
            }
    
            public void Salva()
            {
                contexto.SaveChanges();
            }
    
            public int BuscaIdMax()
            {
                var query = (from f in contexto.Cad
                             select f.Id).Max() + 1;
                return query;
            }
    
        }


    A Minha View:

    <form id="form" action="@Url.Action("Form", "Cad")" method="post">
    
        <label>
            Id:
            <input type="text" name="c.Id"  id="id" value="@ViewBag.Id"/>
        </label>
    
        <label>
            Nome:
            <input type="text" name="c.Nome"  id="nome"/>
        </label>
        <label>
            Preco:
            <input type="text" name="c.Sobrenome" id="sobrenome" />
        </label>
        <label>
            Telefone:
            <input type="text" name="c.Telefone" id="telefone"/>
        </label>
    
        <input type="submit" value="Adicionar" id="salvar" />
    
    </form>
    

    Por ultimo o controller:

    public class CadController : Controller
        {
            //
            // GET: /Cad/
    
            private CadRepository repository = new CadRepository();
    
            public ActionResult Index()
            {
                return View(repository.Lista());
            }
    
            public ActionResult Form()
            {
                ViewBag.Id = repository.BuscaIdMax();
                return View();
            }
    
            [HttpPost]
            public ActionResult Form(Cad c)
            {
                repository.Adiciona(c);
                repository.Salva();
                return RedirectToAction("Index");
            }
    
        }



    terça-feira, 15 de outubro de 2013 08:10

Respostas

Todas as Respostas

  • Você pode mostrar sua classe de Modelo, a Model e a sua classe de Repositório, a Repository  ???

    Anderson Anzileiro






    terça-feira, 15 de outubro de 2013 12:49
  • Esse é o Model:

     [Table("Cad")]
        public class Cad
        {
            [Required]
            public int Id { get; set; }
            [Required]
            public string Nome { get; set; }
            [Required]
            public string Sobrenome { get; set; }
            [Required]
            public string Telefone { get; set; }
        }

    E esse é o Repositório:

     public class CadRepository
        {
            
            private MeuContexto contexto = new MeuContexto();

            public List<Cad> Lista()
            {
                return contexto.Cad.ToList();
            }

            public void Adiciona(Cad c)
            {
                contexto.Cad.Add(c);
            }

            public void Salva()
            {
                contexto.SaveChanges();
            }

            public int BuscaIdMax()
            {
                var query = (from f in contexto.Cad
                             select f.Id).Max() + 1;
                return query;
            }

        }

    terça-feira, 15 de outubro de 2013 19:18
  • Uallace,

    Segue em anexo o link para o download de uma ótima apostila, lá tem a solução para seu problema, acredito que é melhor você lê a apostila de aprender como funciona.

    http://www.k19.com.br/downloads/apostilas/dotnet/k19-k32-desenvolvimento-web-com-aspnet-mvc

    Bons Estudos !

    Lembre-se que se essa resposta for a correta pra sua pergunta responda como resposta para que eu possa ver valorizado e para que outras pessoas possam encontrar soluções para seus problemas mais rápido.


    • Editado Jean Carlos Galhardi quarta-feira, 16 de outubro de 2013 03:24 Faltou colocar o link
    • Marcado como Resposta Uallace sexta-feira, 18 de outubro de 2013 04:43
    quarta-feira, 16 de outubro de 2013 03:23
  • Eu já tinha visto essa apostila,mas não lembra desse problema.E foi vendo esse apostila que lembrei do erro!

    Faltava apenas uma anotação no Id do meu Modelo!

    Grato a todos!

    [Table("Cad")]
        public class Cad
        {
            [Key]
            [Column("id")]
            [DatabaseGenerated(DatabaseGeneratedOption.None)]
            public int Id { get; set; }
            [Required]
            [Column("nome")]
            public string Nome { get; set; }
            [Required]
            [Column("sobrenome")]
            public string Sobrenome { get; set; }
            [Required]
            [Column("telefone")]
            public string Telefone { get; set; }
        }

    sexta-feira, 18 de outubro de 2013 04:42