none
EntityFramework Salvar novo registro com relação One-To-One RRS feed

  • Pergunta

  • Galera, estou a mais de um dia tentando resolver um problema e até o presente momento não consegui.

    Tenho duas tabelas ==> Cliente + Endereco. Fiz um relacionamento do tipo One-To-One entre elas e no Fluent-Api configurei o conforme apresentado abaixo. Acontece que quando vou salvar um novo registro um erro é reportado "An error occurred while updating the entries. See the inner exception for details." 

    ###  Tabela de Clientes  ###
    namespace CrmSystens.Dominio.Entidades
    {
        public class Cliente
        {
        public Cliente(){}

        /*Dados Pessoais*/
        public int IdCliente { get; set; }

        public string ClienteNome { get; set; }

        public DateTime? ClienteDataNascimento { get; set; }

        public string ClienteNumeroCpf { get; set; }

        public string ClienteNumeroRg { get; set; }

        public string ClienteProfissao { get; set; }

        public string ClienteTelefoneResidencial { get; set; }

        public string ClienteTelefoneCelular { get; set; }

        public string ClienteTelefoneComercial { get; set; }

        public string ClienteEmailPessoal { get; set; }

        public DateTime DataCadastro { get; set; }


        //Relacionamento Pai/Filho definindo 1:1
        public virtual Endereco endereco { get; set; }
        }
    }


    ###  Tabela de Enderecos dos Clientes  ###
    namespace CrmSystens.Dominio.Entidades
    {
        public class Endereco
        {
        public int IdCliente { get; set; }

        public string ClienteEnderecoResidencialLogradouro { get; set; }

        public string ClienteEnderecoResidencialNumero { get; set; }

        public string ClienteEnderecoResidencialComplemento { get; set; }

        public string ClienteEnderecoResidencialBairro { get; set; }

        public string ClienteEnderecoResidencialCidade { get; set; }

        public string ClienteEnderecoResidencialUf { get; set; }

        public string ClienteEnderecoResidencialNumeroCep { get; set; }

        public string ClienteEnderecoComercialLogradouro { get; set; }

        public string ClienteEnderecoComercialNumero { get; set; }

        public string ClienteEnderecoComercialComplemento { get; set; }

        public string ClienteEnderecoComercialBairro { get; set; }

        public string ClienteEnderecoComercialCidade { get; set; }

        public string ClienteEnderecoComercialUf { get; set; }

        public string ClienteEnderecoComercialNumeroCep { get; set; }

        public virtual Cliente cliente { get; set; }

        }
    }

    ###  Fluent ###

    namespace CrmSystens.Repositorio.EntityConfig
    {
        public class MapTabelaCadastroCliente : EntityTypeConfiguration<Cliente>
        {
        public MapTabelaCadastroCliente()
        {
            /*O método ToTable define qual o nome que será dado a tabela no banco de dados*/
            ToTable("Tab_Cadastro_Cliente");

            //Definição da chave primária
            HasKey(x => x.IdCliente);

            //Propriedades da TabelaCadastroCliente
            Property(x => x.IdCliente).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).HasColumnName("IdCliente").HasColumnOrder(0);
            Property(x => x.ClienteNome).HasMaxLength(60).HasColumnName("ClienteNome").HasColumnOrder(1);
            Property(x => x.ClienteDataNascimento).HasColumnType("date").HasColumnName("ClienteDataNascimento").HasColumnOrder(2);
            Property(x => x.ClienteNumeroCpf).HasMaxLength(14).HasColumnName("ClienteNumeroCpf").HasColumnOrder(3);
            Property(x => x.ClienteNumeroRg).HasMaxLength(20).HasColumnName("ClienteNumeroRg").HasColumnOrder(4);
            Property(x => x.ClienteProfissao).HasMaxLength(40).HasColumnName("ClienteProfissao").HasColumnOrder(5);
            Property(x => x.ClienteEmailPessoal).HasMaxLength(50).HasColumnName("ClienteEmailPessoal").HasColumnOrder(6);

            // ####################### Relacionamentos #######################
            //Relacionamento Tipo: Um para Um | Tabela Pai/Filho: Cliente / Endereco
            HasOptional(e => e.Endereco).WithRequired(e => e.cliente);

        }
        }
    }

    ###  Repositório  ###
    public void GravaRegistroNovo(Cliente obj)
    {

        var objEndereco = new Endereco
        {
        ClienteEnderecoResidencialLogradouro = "teste",

        ClienteEnderecoResidencialNumero = "teste",

        ClienteEnderecoResidencialComplemento = "teste",

        ClienteEnderecoResidencialBairro = "teste",

        ClienteEnderecoResidencialCidade = "teste",

        ClienteEnderecoResidencialUf = "teste",

        ClienteEnderecoResidencialNumeroCep = "teste",

        ClienteEnderecoComercialLogradouro = "teste",

        ClienteEnderecoComercialNumero = "teste",

        ClienteEnderecoComercialComplemento = "teste",

        ClienteEnderecoComercialBairro = "teste",

        ClienteEnderecoComercialCidade = "teste",

        ClienteEnderecoComercialUf = "teste",

        ClienteEnderecoComercialNumeroCep = "teste"
        };
        obj.Endereco = objEndereco;

        Db.Set<Cliente>().Add(obj);
        Db.SaveChanges();

    }

    No Repositório os dados relacionados com os campos de endereço ainda serão tratados por este motivo estou informando "Teste" para todos. O relacionamento deve ser One-To-One  uma vez que gravarei somente um endereço para cada cliente.

    Agradeço a quem puder dar uma ajuda!!!

    quinta-feira, 1 de outubro de 2015 20:50

Respostas

Todas as Respostas

  • Olá urlflavio,

    Tudo bem?

    Eu sei que para te auxiliar talvez seja necessário bem mais que informações de outras threads com o mesmo erro. Mas ainda assim gostaria que verificasse estas informações para ver se os problemas em questão são semelhantes ao seu. Algumas vezes este tipo de abordagem nos ajuda a ver o que está impactando negativamente no projeto. Seguem abaixo os links mencionados:

    An error occurred while updating the entries

    Entity Framework - “An error occurred while updating the entries.

    An error occurred while updating the entries.

    An error occurred while updating the entries

    Espero ter ajudado.

    Atenciosamente


    Marcos Roberto de Souza Junior

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

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e 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.


    • Editado Marcos SJ sexta-feira, 2 de outubro de 2015 14:12
    • Marcado como Resposta urlflavio segunda-feira, 5 de outubro de 2015 18:43
    • Não Marcado como Resposta urlflavio segunda-feira, 5 de outubro de 2015 20:41
    • Marcado como Resposta urlflavio segunda-feira, 5 de outubro de 2015 22:11
    sexta-feira, 2 de outubro de 2015 14:12
  • Marcos, Vlw pela ajuda!
    segunda-feira, 5 de outubro de 2015 18:43
  • :D

    Que bom que a informação serviu de valia.

    Atenciosamente


    Marcos Roberto de Souza Junior

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

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e 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.

    terça-feira, 6 de outubro de 2015 11:18