ADICIONA VALORES NUMA TABELA RELACIONADA NO ENTITY
Pessoal o cenário é o seguinte, estou tentando add uma valor na minha entidade, que está relacionada com uma chave primária em outra tabela, só que aparece esta mensagem:
[Ô] An object with the same key already exists in the ObjectStateManager. The existing object is in the Modified state. An object can only be added to the ObjectStateManager again if it is in the added state.[Ô]
Alguma dica de como resolver isto ai?
Código da Classe PessoasDAL com o comando INSERT:
Public Shared Function CriaPessoasEContatoEBairro(ByVal PessoasToAdd As Pessoa, ByVal PessoasContatoToAdd As Pessoas_Contato, ByVal PessoaEnderecosToAdd As Pessoas_Enderecos, ByVal PessoasEnderecosBairrosAdd As Pessoas_End_Bairro) As Boolean
[ô]Public Shared Function CriaPessoasEContatoEBairro(ByVal PessoasToAdd As Pessoa, ByVal PessoasContatoToAdd As Pessoas_Contato, ByVal PessoaEnderecosToAdd As Pessoas_Enderecos, ByVal PessoasEnderecosBairrosAdd As Pessoas_End_Bairro) As Boolean
Dim Transaction As DbTransaction = Nothing
[ô]usa a conexão definida no arquivo App.config
Using DatabaseConnection As New EntityConnection([Ô]name=GerenteMaxEntities[Ô])
Try
[ô]verifica o estado da conexão: se estiver fechada então abre
If DatabaseConnection.State = ConnectionState.Closed Then
DatabaseConnection.Open()
End If
[ô]cria uma instãncia do Contexto gerado no Entity Data Model
Dim contextoAtual = New GerenteMaxEntities(DatabaseConnection)
Transaction = contextoAtual.Connection.BeginTransaction()
[ô]Incluir os Contatos, Enderecos e Bairros [Ô]
contextoAtual.AddToPessoas_Contato(PessoasContatoToAdd)
contextoAtual.AddToPessoas_Enderecos(PessoaEnderecosToAdd)
contextoAtual.AddToPessoas_End_Bairro(PessoasEnderecosBairrosAdd)
[ô]contextoAtual.Pessoas_End_Bairro.Attach(PessoasEnderecosBairrosAdd)
[ô]contextoAtual.ObjectStateManager.ChangeObjectState(PessoasEnderecosBairrosAdd, EntityState.Modified)
[ô][ô]contextoAtual.Pessoas_Enderecos.Attach(PessoaEnderecosToAdd)
[ô][ô]contextoAtual.Pessoas_Contato.Attach(PessoasContatoToAdd)
[ô][ô]contextoAtual.Pessoas_End_Bairro.Attach(PessoasEnderecosBairrosAdd)
contextoAtual.SaveChanges()
[ô]contextoAtual.AcceptAllChanges()
[ô]Pega o PessoasContatoId de novos Registros incluidos[Ô]
Dim PessoasContatoId As Integer = PessoasContatoToAdd.Contato_Id
[ô]Pega o PessoasEnderecosID de novos Registros incluidos[Ô]
Dim PessoasEnderecosID As Integer = PessoaEnderecosToAdd.Pes_End_Id
[ô]Pega o PessoasEnderecosBairrosID de novos Registros incluidos[Ô]
Dim PessoasEnderecosBairrosID As Integer = PessoasEnderecosBairrosAdd.Pes_End_Bairro_Id
[ô]retorna o PessoasContatoId ou PessoasBairroId do Novo Contato ou Bairro adicionado.
[ô]If PessoasContatoId < 1 Or PessoasEnderecosID < 1 Or PessoasEnderecosBairrosID < 1 Then
If PessoasContatoId < 1 Or PessoasEnderecosID < 1 Or PessoasEnderecosBairrosID < 1 Then
Throw New ApplicationException([Ô]Não foi possÃvel incluir o novo cadastro.[Ô])
End If
[ô]Insere detalhes
[ô]Fornece uma referência a um objeto que é uma instância de um tipo da entidade
PessoasToAdd.Pessoas_ContatoReference.EntityKey = New EntityKey([Ô]GerenteMaxEntities.Pessoas_Contato[Ô], [Ô]Contato_Id[Ô], PessoasContatoId)
PessoasToAdd.Pessoas_EnderecosReference.EntityKey = New EntityKey([Ô]GerenteMaxEntities.Pessoas_Enderecos[Ô], [Ô]Pes_End_Id[Ô], PessoasEnderecosID)
PessoaEnderecosToAdd.Pessoas_End_BairroReference.EntityKey = New EntityKey([Ô]GerenteMaxEntities.Pessoas_End_Bairro[Ô], [Ô]Pes_End_Bairro_Id[Ô], PessoasEnderecosBairrosID)
contextoAtual.AddToPessoas(PessoasToAdd)
contextoAtual.AddToPessoas_Enderecos(PessoaEnderecosToAdd)
[Ô] An object with the same key already exists in the ObjectStateManager. The existing object is in the Modified state. An object can only be added to the ObjectStateManager again if it is in the added state.[Ô]
Alguma dica de como resolver isto ai?
Código da Classe PessoasDAL com o comando INSERT:
Public Shared Function CriaPessoasEContatoEBairro(ByVal PessoasToAdd As Pessoa, ByVal PessoasContatoToAdd As Pessoas_Contato, ByVal PessoaEnderecosToAdd As Pessoas_Enderecos, ByVal PessoasEnderecosBairrosAdd As Pessoas_End_Bairro) As Boolean
[ô]Public Shared Function CriaPessoasEContatoEBairro(ByVal PessoasToAdd As Pessoa, ByVal PessoasContatoToAdd As Pessoas_Contato, ByVal PessoaEnderecosToAdd As Pessoas_Enderecos, ByVal PessoasEnderecosBairrosAdd As Pessoas_End_Bairro) As Boolean
Dim Transaction As DbTransaction = Nothing
[ô]usa a conexão definida no arquivo App.config
Using DatabaseConnection As New EntityConnection([Ô]name=GerenteMaxEntities[Ô])
Try
[ô]verifica o estado da conexão: se estiver fechada então abre
If DatabaseConnection.State = ConnectionState.Closed Then
DatabaseConnection.Open()
End If
[ô]cria uma instãncia do Contexto gerado no Entity Data Model
Dim contextoAtual = New GerenteMaxEntities(DatabaseConnection)
Transaction = contextoAtual.Connection.BeginTransaction()
[ô]Incluir os Contatos, Enderecos e Bairros [Ô]
contextoAtual.AddToPessoas_Contato(PessoasContatoToAdd)
contextoAtual.AddToPessoas_Enderecos(PessoaEnderecosToAdd)
contextoAtual.AddToPessoas_End_Bairro(PessoasEnderecosBairrosAdd)
[ô]contextoAtual.Pessoas_End_Bairro.Attach(PessoasEnderecosBairrosAdd)
[ô]contextoAtual.ObjectStateManager.ChangeObjectState(PessoasEnderecosBairrosAdd, EntityState.Modified)
[ô][ô]contextoAtual.Pessoas_Enderecos.Attach(PessoaEnderecosToAdd)
[ô][ô]contextoAtual.Pessoas_Contato.Attach(PessoasContatoToAdd)
[ô][ô]contextoAtual.Pessoas_End_Bairro.Attach(PessoasEnderecosBairrosAdd)
contextoAtual.SaveChanges()
[ô]contextoAtual.AcceptAllChanges()
[ô]Pega o PessoasContatoId de novos Registros incluidos[Ô]
Dim PessoasContatoId As Integer = PessoasContatoToAdd.Contato_Id
[ô]Pega o PessoasEnderecosID de novos Registros incluidos[Ô]
Dim PessoasEnderecosID As Integer = PessoaEnderecosToAdd.Pes_End_Id
[ô]Pega o PessoasEnderecosBairrosID de novos Registros incluidos[Ô]
Dim PessoasEnderecosBairrosID As Integer = PessoasEnderecosBairrosAdd.Pes_End_Bairro_Id
[ô]retorna o PessoasContatoId ou PessoasBairroId do Novo Contato ou Bairro adicionado.
[ô]If PessoasContatoId < 1 Or PessoasEnderecosID < 1 Or PessoasEnderecosBairrosID < 1 Then
If PessoasContatoId < 1 Or PessoasEnderecosID < 1 Or PessoasEnderecosBairrosID < 1 Then
Throw New ApplicationException([Ô]Não foi possÃvel incluir o novo cadastro.[Ô])
End If
[ô]Insere detalhes
[ô]Fornece uma referência a um objeto que é uma instância de um tipo da entidade
PessoasToAdd.Pessoas_ContatoReference.EntityKey = New EntityKey([Ô]GerenteMaxEntities.Pessoas_Contato[Ô], [Ô]Contato_Id[Ô], PessoasContatoId)
PessoasToAdd.Pessoas_EnderecosReference.EntityKey = New EntityKey([Ô]GerenteMaxEntities.Pessoas_Enderecos[Ô], [Ô]Pes_End_Id[Ô], PessoasEnderecosID)
PessoaEnderecosToAdd.Pessoas_End_BairroReference.EntityKey = New EntityKey([Ô]GerenteMaxEntities.Pessoas_End_Bairro[Ô], [Ô]Pes_End_Bairro_Id[Ô], PessoasEnderecosBairrosID)
contextoAtual.AddToPessoas(PessoasToAdd)
contextoAtual.AddToPessoas_Enderecos(PessoaEnderecosToAdd)
A mensagem é bem clara, você está tentando inserir um objeto cuja chave primária já existe na lista de objetos.
Realmente isso aconteceu depois que fiz a associação da Tabela Bairros com Enderecos que tem um FK de Bairros... mas o que eu faço ?
Pois aqui no meu projeto muitos os clientes tem vários endereços de loja que consequentemente pode está em bairros diferentes....
Tem alguma solução ?
Obrigado ....
Pois aqui no meu projeto muitos os clientes tem vários endereços de loja que consequentemente pode está em bairros diferentes....
Tem alguma solução ?
Obrigado ....
Vir estes exemplos aqui para adicionar uma entidade que está sendo monitorada pelo o contexto, mas não conseguir aplicar corretamente a lógica alguém pode me passar alguma dica?
contextoAtual.Pessoas_Enderecos.Attach(PessoaEnderecosToAdd)
contextoAtual.Pessoas_Contato.Attach(PessoasContatoToAdd)
contextoAtual.Pessoas_End_Bairro.Attach(PessoasEnderecosBairrosAdd)
[ô]context.ObjectStateManager.ChangeObjectState(detachedCustomer, entityState.Modified);
[ô]context.ObjectStateManager.ChangeObjectState(detachedCustomer, entityState.Modified);
[ô]context.ObjectStateManager.ChangeObjectState(detachedCustomer, entityState.Modified);
contextoAtual.Pessoas_Enderecos.Attach(PessoaEnderecosToAdd)
contextoAtual.Pessoas_Contato.Attach(PessoasContatoToAdd)
contextoAtual.Pessoas_End_Bairro.Attach(PessoasEnderecosBairrosAdd)
[ô]context.ObjectStateManager.ChangeObjectState(detachedCustomer, entityState.Modified);
[ô]context.ObjectStateManager.ChangeObjectState(detachedCustomer, entityState.Modified);
[ô]context.ObjectStateManager.ChangeObjectState(detachedCustomer, entityState.Modified);
Tópico encerrado , respostas não são mais permitidas