none
Inserir registro com Entity RRS feed

  • Pergunta

  • Pessoal estou criando um sistema windows form com entity, estava indo bem até agora estou criando a tela de cadastro de clientes ela esta relacionado com a tabela de endereço na de inserir um novo registro esta dando um erro  fui então no View Detail para ver o erro que estava dando no innerException aparece null na Message esta aparecendo o seguinte erro "Validation failed for one or more entities. See 'EntityValidationErrors' property for more details."  no TargetState aparece "{Int32 SaveChanges()}"

    Vejá como estou fazendo:

     private void IncluirButton_Click(object sender, EventArgs e)
            {
                try
                {   
                    LivrariaContext contexto = new LivrariaContext();
    
                    Clientes cliente = new Clientes();
    
                    cliente.Nome = txNome.Text;
                    cliente.Cpf = txCPF.Text;
                    cliente.Email = txEmail.Text;
                    cliente.Telefone = txTelefone.Text;
                    cliente.Celular = txCelular.Text;
                
                    contexto.Clientes.Add(cliente);
    
                    contexto.SaveChanges(); -->Erro ocorre nessa linha
    
                    Endereco endereco = new Endereco();
    
                    endereco.ClienteID = cliente.ClienteId;
                    endereco.Cep = txCep.Text;
                    endereco.Logradouro = txLogradouro.Text;
                    endereco.Numero = txNumero.Text;
                    endereco.Complemento = txComplemento.Text;
                    endereco.Bairro = txBairro.Text;
                    endereco.Estado = txEstado.Text;
                    endereco.Cidade = txCidade.Text;
    
                    contexto.Endereco.Add(endereco);
    
                    contexto.SaveChanges();
    
                    CancelarButton.PerformClick();
    
                    throw new Exception("Cadastrado com sucesso");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ocoreu erro:"  + ex.Message);   
                }
            }

    sábado, 15 de outubro de 2016 13:33

Respostas

  • Tente dessa forma:

    LivrariaContext contexto = new LivrariaContext();
    
                    Clientes cliente = new Clientes();
    
                    cliente.Nome = txNome.Text;
                    cliente.Cpf = txCPF.Text;
                    cliente.Email = txEmail.Text;
                    cliente.Telefone = txTelefone.Text;
                    cliente.Celular = txCelular.Text;
    
                    contexto.Clientes.Add(cliente);                
    
                    Endereco endereco = new Endereco();               
                    endereco.Cep = txCep.Text;
                    endereco.Logradouro = txLogradouro.Text;
                    endereco.Numero = txNumero.Text;
                    endereco.Complemento = txComplemento.Text;
                    endereco.Bairro = txBairro.Text;
                    endereco.Estado = txEstado.Text;
                    endereco.Cidade = txCidade.Text;
                    endereco.Clientes.Add(cliente);
    
                    contexto.Endereco.Add(endereco);
    
                    contexto.SaveChanges();


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por um acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Sugerido como Resposta Robson William SilvaModerator terça-feira, 18 de outubro de 2016 12:32
    • Marcado como Resposta CLAUDIO JOSE terça-feira, 18 de outubro de 2016 16:02
    • Não Marcado como Resposta CLAUDIO JOSE sexta-feira, 21 de outubro de 2016 01:23
    • Marcado como Resposta CLAUDIO JOSE domingo, 19 de março de 2017 15:44
    segunda-feira, 17 de outubro de 2016 17:20

Todas as Respostas

  • Claudio, compartilhe o código de sua classe Clientes e LivrariaContext.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por um acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    sábado, 15 de outubro de 2016 13:38
  • OK ai vai elas:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    //-----------------------
    using System.Data.Entity;
    
    namespace EntiFrameWorkWF
    {
        class LivrariaContext : DbContext
        {
                
    
            public LivrariaContext()
                : base("Livraria")
            {
                //Disabelita a inicialização do banco
                Database.SetInitializer<LivrariaContext>(null);
            }
    
            public DbSet<Editora> Editora { get; set; }
            public DbSet<Endereco> Endereco { get; set; }
            public DbSet<Clientes> Clientes { get; set; }
    
    
        }
    }
    

    essa classe Clientes:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    //-------------------
    using System.Data.Entity;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.ComponentModel.DataAnnotations;
    
    namespace EntiFrameWorkWF
    {
        [Table("Clientes")]
        public class Clientes
        {
            [Key]
            [Column("ClienteId", TypeName = "INT")]
            public int ClienteId { get; set; }
    
            [MaxLength(60)]
            [Column("Nome", TypeName="varchar")]
            public string Nome { get; set; }
    
            [MaxLength(15)]
            [Column("Cpf", TypeName="nchar")]
            public string Cpf { get; set; }
    
            [MaxLength(60)]
            [Column("Email", TypeName = "varchar")]
            public string Email { get; set; }
    
            [MaxLength(11)]
            [Column("Telefone", TypeName = "nchar")]
            public string Telefone { get; set; }
    
            [MaxLength(11)]
            [Column("Celular", TypeName = "nchar")]
            public string Celular { get; set; }
    
        }
    }
    

    Essa classe e de endereço que esta relacionada com clientes

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    //-------------------
    using System.Data.Entity;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.ComponentModel.DataAnnotations;
    
    namespace EntiFrameWorkWF
    {
        
        [Table("Endereco")]
        public class Endereco
        {
            [Key]
            [Column("EnderecoID", TypeName = "INT")]
            public int EnderecoID { get; set; }
    
            [Column("ClienteId", TypeName = "BIGINT")]
            public int  ClienteID { get; set; }
                
            [MaxLength(10)]
            [Column("Cep", TypeName="nchar")]
            public string Cep { get; set; }
            [Required(ErrorMessage="Campo cep é obrigatório")]
                
            [MaxLength(60)]
            [Column("Logradouro", TypeName="VARCHAR")]
            public string Logradouro { get; set; }
    
            [MaxLength(10)]
            [Column("Numero", TypeName="nchar")]
            public string Numero { get; set; }
    
            [MaxLength(10)]
            [Column("Complemento", TypeName="nchar")]
            public string Complemento { get; set; }
    
            [MaxLength(20)]
            [Column("Bairro", TypeName = "nchar")]
            public string Bairro { get; set; }
    
            [MaxLength(20)]
            [Column("Estado",TypeName="nchar")]
            public string Estado { get; set; }
    
            [MaxLength(20)]
            [Column("Cidade",TypeName="nchar")]
            public string  Cidade { get; set; }
    
            [MaxLength(20)]
            [Column("Pais", TypeName="nchar")]
            public string Pais { get; set; }
    
            [ForeignKey("ClienteId")]
            public ICollection<Clientes> Clientes { get; set; }
        }
    }
    

    sábado, 15 de outubro de 2016 16:51
  • Adicione um catch no seu bloco try..catch (tem que ser antes da linha catch (Exception ex)):

    catch (DbEntityValidationException ex)
            {
                // Retrieve the error messages as a list of strings.
                var errorMessages = ex.EntityValidationErrors
                        .SelectMany(x => x.ValidationErrors)
                        .Select(x => x.ErrorMessage);
        
                // Join the list to a single string.
                var fullErrorMessage = string.Join("; ", errorMessages);
        
                // Combine the original exception message with the new one.
                var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage);
        
                MessageBox.Show(exceptionMessage);
            }
    Com este bloco adicional você vai saber qual é a mensagem de erro exata, daí você compartilha conosco.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por um acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    sábado, 15 de outubro de 2016 17:59
  • Bom achei o erro agora arrumei o que estava dando o bog e agora apareceu outro eu tenho um campo ClienteID que relacionado com a tabela endereço ela o do tipo Identity o erro esta acontecendo é seguinte: "Não é possível inserir um valor explícito para a coluna de identidade na tabela 'Clientes' quando IDENTITY_INSERT está definido como OFF."

    sábado, 15 de outubro de 2016 21:00
  • Você está tentando atribuir valor para esta coluna quando vai inserir um novo cliente?

    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por um acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    domingo, 16 de outubro de 2016 13:59
  • Não descobri o problema mas não sei como arrumar é assim essa tabela com falei esta relacionada com a tabela de endereço eu tenho uma outra tabela nesse mesmo sistema chamada Editora estava tudo ok com ela ai quando criei uma outra tabela chamada livros relacionada com EditoraID ocorreu o mesmo erro sempre que crio um relacionamento ocorrre esse erro
    domingo, 16 de outubro de 2016 18:56
  • Se for apenas um aplicativo para estudos, compartilhe o código no Dropbox ou outro serviço que dou uma olhada.

    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por um acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    domingo, 16 de outubro de 2016 22:10
  • segue o link dropbox


    segunda-feira, 17 de outubro de 2016 00:29
  • Link inválido

    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por um acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    segunda-feira, 17 de outubro de 2016 09:38
  • desculpa ai vai EntiFrameWorkWF  essa é a pasta do projeto mas agora o link está certo
    segunda-feira, 17 de outubro de 2016 11:15
  • Claudio, você não pode apenas copiar a url na barra de endereços. Você tem que ir na opção de compartilhamento no Dropbox para pegar a url correta.

    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por um acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    segunda-feira, 17 de outubro de 2016 11:20
  • https://www.dropbox.com/home/EntiFrameWorkWF 

    ai vai 

    segunda-feira, 17 de outubro de 2016 12:12
  • Este é o mesmo link, Claudio. Use outro serviço se não está encontrando como compartilhar no Dropbox.

    Tem wetransfer.com, Mega, etc.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por um acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    segunda-feira, 17 de outubro de 2016 12:32
  • estou mandando o arquivo zipado do aplicativo manda seu email que compartilho para vc se não conseguir

    https://www.dropbox.com/s/hukikj0meys53ts/EntiFrameWorkWF.zip?dl=0

    segunda-feira, 17 de outubro de 2016 17:05
  • Tente dessa forma:

    LivrariaContext contexto = new LivrariaContext();
    
                    Clientes cliente = new Clientes();
    
                    cliente.Nome = txNome.Text;
                    cliente.Cpf = txCPF.Text;
                    cliente.Email = txEmail.Text;
                    cliente.Telefone = txTelefone.Text;
                    cliente.Celular = txCelular.Text;
    
                    contexto.Clientes.Add(cliente);                
    
                    Endereco endereco = new Endereco();               
                    endereco.Cep = txCep.Text;
                    endereco.Logradouro = txLogradouro.Text;
                    endereco.Numero = txNumero.Text;
                    endereco.Complemento = txComplemento.Text;
                    endereco.Bairro = txBairro.Text;
                    endereco.Estado = txEstado.Text;
                    endereco.Cidade = txCidade.Text;
                    endereco.Clientes.Add(cliente);
    
                    contexto.Endereco.Add(endereco);
    
                    contexto.SaveChanges();


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por um acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Sugerido como Resposta Robson William SilvaModerator terça-feira, 18 de outubro de 2016 12:32
    • Marcado como Resposta CLAUDIO JOSE terça-feira, 18 de outubro de 2016 16:02
    • Não Marcado como Resposta CLAUDIO JOSE sexta-feira, 21 de outubro de 2016 01:23
    • Marcado como Resposta CLAUDIO JOSE domingo, 19 de março de 2017 15:44
    segunda-feira, 17 de outubro de 2016 17:20
  • Cara pensei que tinha resolvido mais esta com erro porque tenho que gravar o ID do cliente na tabela endereço e não estou conseguindo recuperar 
    • Editado CLAUDIO JOSE sexta-feira, 21 de outubro de 2016 01:24
    terça-feira, 18 de outubro de 2016 16:02