7
respostas

Aula 5 - Membership - Ao Salvar, da erro abaixo

Erro ao inserir o Usuario: Metodo: Adiciona(UsuarioViewModel model)

An exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll but was not handled in user code

Additional information: Cannot insert explicit value for identity column in table 'Usuarios' when IDENTITY_INSERT is set to OFF.

WebSecurity.CreateUserAndAccount(model.Nome, model.Senha, new Usuario { Email = model.Email });

7 respostas

Oi Adriano, tudo bom?

Posso dar uma olhada no código do seu método Adiciona?

Aguardo retorno =)

Opa Andre!

public ActionResult Adiciona(UsuarioViewModel model)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    WebSecurity.CreateUserAndAccount(model.Nome, model.Senha, new Usuario { Email = model.Email });
                    return RedirectToAction("Index");
                }
                catch (MembershipCreateUserException e)
                {
                    ModelState.AddModelError("usuario.Invalido", e.Message);
                    return View("Form", model);
                }

            }
            else
            {
                return View("Form",model);
            }

        }

Seu código para adicionar não me parece ter nada errado...

O erro que você está recebendo, está nos dizendo que estamos tentando passar um id na criação do usuario mas configuramos no banco de dados para que o id fosse auto incrementado...

Uma forma de solucionar é alterar o IDENTITY_INSERT da sua tabela Usuarios para ON, mas não é considerado boa prática.

Tenta verificar se em algum lugar um id está sendo definido no seu UsuarioViewModel. A classe deve se parecida com:

    public class UsuarioModel
    {
        [Required]
        public string Nome { get; set; }

        [Required, EmailAddress]
        public string Email { get; set; }

        [Required]
        public string Senha { get; set; }

        [Compare("Senha")]
        public string ConfirmacaoSenha { get; set; }
    }

Ola Andre!

Em que momento tivemos que configurar no banco de dados para que o id fosse auto incrementado...

Nao lembro de ter visto no curso...

Pois ainda da erro!!!

Essa configuração é gerada automaticamente pelo nosso Entity Framework, que lê nossas entidades e cria as tabelas no banco ;)

Quando definimos (neste capitulo https://cursos.alura.com.br/course/projeto-asp-net-mvc-5-entity-framework/task/5701):

public class Usuario
{
    public int Id { get; set; }

    [Required]
    public string Nome { get; set; }

    [Required,EmailAddress]
    public string Email { get; set; }
}

Estamos dizendo que nosso Usuario possui um campo Id do tipo inteiro. Nosso Entity Framework, sabendo disso, já cria nossa tabela com um id e valor auto incrementado pois essa é a melhor prática.

Repare que ter um Id que não seja auto incrementado pode dar muito problema pois precisaremos lembrar sempre em que posição o banco parou para adicionar na proxima, respeitando a ordem em que os dados são inseridos!

Se você quiser, pode subir seu projeto no github e me mandar o link aqui que eu dou uma analisada nele pra você =)

Vou quere sim Andre!

Mas nunca usei o GitHub pra subir arquivos.

Se tiver um exemplo ou link de como fazer, por favor.

Obrigado pela compreensao !

É muito comum, na sua vida como desenvolvedor, a necessidade do git. segue aqui o link do curso de git da alura, caso você tenha interesse =)

https://www.alura.com.br/curso-online-git

Enquanto isso, você pode subir no google drive mesmo o projeto que eu dou uma olhada!

Aguardo o link =)