Usuário com melhor resposta
EntityFramework Salvar novo registro com relação One-To-One

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!!!
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.
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.
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.
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.
-
-
: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.