Entidade Framework 4 Excluir object da coleção de entidades

Eu tenho uma entidade “Solicitar” com um relacionamento 1 .. * para a Entidade “RequestProperty”. Portanto, há uma coleção de objects RequestProperty em “Request”. Quando eu atualizo uma “solicitação”, desejo excluir todos os itens da EntityCollection RequestProperty e adicionar os novos itens do object de domínio de input. Quando eu iterar sobre a coleção Request.Properties e chamar um remover ou um DeleteObject no item, a enumeração falha porque a coleção foi modificada.

A partir de agora estou fazendo isso:

 while (true) { if (newRequest.Properties.Count > 0) context.RequestPropertySet.DeleteObject(newRequest.Properties.First()); else break; } 

Como isso não é realmente “legal”, achei que deveria haver outra maneira de esvaziar uma coleção de um relacionamento. Obrigado por seus pensamentos.

A resposta depende da maneira como você modelou suas entidades. Se você estiver usando uma relação independente comum ou uma relação de chave estrangeira, você terá que usar sua abordagem atual – também estou usando isso no meu projeto.

Se você definiu a relação de identificação, poderá chamar apenas Clear na coleção, conforme descrito no @Craig. A relação de identificação é uma relação especial em que a chave primária da entidade dependente contém a chave estrangeira da entidade pai.

Exemplo de modelo EF

O exemplo mostra entidade Order e entidade OrderItem com chave estrangeira identificando a relação entre eles. A chave primária de OrderItem consiste em Id exclusivo e OrderId que é FK da tabela Order . Com essa configuração, você não precisa percorrer os OrderItem e excluir cada item separadamente. Simplesmente remover OrderItem da coleção será executado como exclusão no database e a coleção de limpeza excluirá todos os OrderItem relacionados no database.

Use o método Clear() :

 newRequest.Properties.Clear();