Existe uma maneira de encontrar todas as entidades que tiveram seus relacionamentos excluídos?
Estou tentando não fazer com que minha lógica de negócios conheça o funcionamento interno da minha camada de dados e vice-vers
Mas o Entity Framework está tornando isso difícil. Eu posso inserir em uma coleção (na minha camada de negócios) sem uma referência ao ObjectContext:
order.Containers.Add(new Container { ContainerId = containerId, Order = order });
E isso economiza muito quando chega a hora de fazer umaSaveChanges()
na camada de dados.
Mas para excluir um item de uma coleção, preciso de uma referência ao ObjectContext. (Eu sou o caso # 1 nesteguide para excluir entidades EF.) Se eu apenas fizer isso:
delContainers.ForEach(container => order.Containers.Remove(container));
Então, quando ligo paraSaveChanges()
Recebo uma exceção dizendo que preciso excluir o objeto e a referênci
Então, minhas opções como eu vejo são:
Para passar um delegado para a minha lógica de negócios que chamará o método Entity Framework ObjectContext DeletOr (espero) encontre uma maneira de obter todas as entidades que tiveram suas referências excluídas e realmente as exclu (Logo antes de ligar paraSaveChanges()
na minha camada de dados.)lguém conhece uma maneira de fazer iss
ATUALIZAR
Tentei o seguinte:
// Add an event when Save Changes is called
this.ObjectContext.SavingChanges += OnSavingChanges;
...
void OnSavingChanges(object sender, EventArgs e)
{
var objectStateEntries = ObjectContext.ObjectStateManager
.GetObjectStateEntries(EntityState.Deleted);
foreach (var objectStateEntry in objectStateEntries)
{
if (objectStateEntry.IsRelationship)
{
// Find some way to delete the related entity
}
}
}
Mas, mesmo que eu tenha excluído um relacionamento, o conjunto de itens excluídos está vazi
(Tentei visualizar todos os itens também e meu relacionamento não está lá. Claramente, há algo fundamental que não entendo sobre o ObjectStateManager.)