Inquiridor
Excluir em listas internas com POCO

Pergunta
-
Estou trabalhando em um projeto com EF4 e as classes POCO escritas por mim mesmo. Estou com a seguinte dificuldade.
Tenho uma classe Pessoa que possui uma coleção de contatos.
Quando eu removo um destes contatos da coleção e tento salvar o objeto ele me devolve o seguinte erro:A relationship from the 'FK__Contato__PessoaI__214BF109' AssociationSet is in the 'Deleted' state. Given multiplicity constraints, a corresponding 'Contato' must also in the 'Deleted' state.
Vi em alguns sites que isso tem a ver com Cascade na tabela, mas na minha tabela não tem nada definido com relação a Cascade Delete e nem no mapeamento.
Todas as Respostas
-
Amigo, ai é que está se você tivesse definido o cascade na sua tabela o procedimento séria mais fácil. Sem nada definido o Entity Framework não sabe o que fazer e tenta exclir o objeto. o BD nega o comando e retorna o erro. da uma olhada aqui:http://olavooneto.wordpress.com/2011/01/26/linq-to-entity-dicas/ no item 2
Olavo Oliveira Neto
http://olavooneto.wordpress.com
Se for útil marque como resposta e faça um Developer feliz :) -
-
Minha classe pessoa está construída da seguinte forma:
public class Pessoa { public Guid Id {get; protected set;} public string Nome {get; protected set;} protected virtual IList<Contato> ContatosInterno {get;set;} public IEnumerable<Contato> Contatos { get { return ContatosInterno.AsEnumerable(); } } public void AdicionarContato(Guid id, string descricao, TipoContato tipoContato) { ContatosInterno.Add(new Contato(id, descricao, tipoContato)); } public void RemoverContato(Guid id) { ContatosInterno.Remove(ContatosInterno.First(c => c.Id.Equals(id))); }
Meu código para remoção do contato é o seguinte:
using (var ctx = new Entities()) { var pessoa = ctx.Pessoa.First(p => p.Id.Equals(pessoaId)); pessoa.RemoverContato(contatoId); ctx.SaveChanges(); }
Já coloquei o Cascade no relacionamento e não funciona.
Já não sei mais como resolver.
-
alem do cascade, você colocou o include ?
Olavo Oliveira Neto
http://olavooneto.wordpress.com
Se for útil marque como resposta e faça um Developer feliz :) -