ADICIONA VALORES NUMA TABELA RELACIONADA NO ENTITY

TSANALISTA 10/09/2012 17:44:30
#409385
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)

KERPLUNK 10/09/2012 17:49:16
#409386
A mensagem é bem clara, você está tentando inserir um objeto cuja chave primária já existe na lista de objetos.
TSANALISTA 10/09/2012 18:58:37
#409392
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 ....
TSANALISTA 10/09/2012 19:04:53
#409393
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);
Tópico encerrado , respostas não são mais permitidas