Есть ли способ найти все сущности, у которых были удалены их отношения?
Я стараюсь, чтобы моя бизнес-логика не знала, как работает мой уровень данных, и наоборот.
Но Entity Framework делает это сложно. Я могу вставить в коллекцию (в моем бизнес-уровне) без ссылки на ObjectContext:
order.Containers.Add(new Container { ContainerId = containerId, Order = order });
И это прекрасно экономит, когда приходит время сделатьSaveChanges()
на уровне данных.
Но чтобы удалить элемент из коллекции, мне нужна ссылка на ObjectContext. (Я случай № 1 в этомруководство по удалению EF Entities.) Если я просто сделаю это:
delContainers.ForEach(container => order.Containers.Remove(container));
Тогда когда я позвонюSaveChanges()
Я получаю исключение, сообщающее, что мне нужно удалить объект, а также ссылку.
Итак, мои варианты, как я вижу это:
Чтобы передать делегата в мою бизнес-логику, которая будет вызывать метод Entity Framework ObjectContext Delete.Или (я надеюсь) найти способ удалить все сущности, для которых была удалена их ссылка, и фактически удалить их. (Прямо перед звонкомSaveChanges()
в моем слое данных.)Кто-нибудь знает способ сделать это?
ОБНОВИТЬ:
Я попробовал это:
// 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
}
}
}
Но нет, хотя я удалил отношение, набор удаленных элементов пуст.
(Я тоже пытался просмотреть все элементы, и мои отношения там отсутствуют. Ясно, что есть что-то фундаментальное, чего я не понимаю в ObjectStateManager.)