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

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

Но Entity Framework усложняет задачу. Я могу вставить в коллекцию (на моем бизнес-уровне) без ссылки на ObjectContext:

order.Containers.Add(new Container { ContainerId = containerId, Order = order });

И это отлично сэкономит, когда придет время выполнить SaveChanges () на уровне данных.

Но чтобы удалить элемент из коллекции, мне нужна ссылка на ObjectContext. (Я являюсь случаем № 1 в этом руководстве по удалению объектов EF .) Если я просто сделаю это:

 delContainers.ForEach(container => order.Containers.Remove(container));

Тогда, когда я вызываю SaveChanges () , я получаю исключение, сообщающее мне, что Мне нужно удалить объект, а также ссылку.

Итак, у меня есть следующие варианты:

  1. Передать делегату моей бизнес-логике, который вызовет метод Entity Framework ObjectContext Delete.
  2. Или (я надеюсь) найти способ получить все объекты, ссылки на которые были удалены, и фактически удалить их. (Прямо перед вызовом 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.)

7
задан Vaccano 16 December 2011 в 23:02
поделиться