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