Есть ли способ найти все сущности, у которых были удалены их отношения?

Я стараюсь, чтобы моя бизнес-логика не знала, как работает мой уровень данных, и наоборот.

Но 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.)

Ответы на вопрос(2)

Ваш ответ на вопрос