Удаление дочерних объектов в Entity Framework при использовании POCO - PullRequest
2 голосов
/ 16 июня 2011

Я использую POCO с EF4 и не могу удалить дочерний объект из родительского.Рассмотрим следующий сценарий:

public class Order
{
     public List<OrderItem> Items { get; private set; }
}

Мне нужно удалить OrderItem из объекта Order, например:

myOrder.Items.Remove(0);

Я ожидаю, что EF будет отслеживать изменения и удаляет связанный OrderItem привызовите ObjectContext.SaveChanges ().

Однако я понял, что это невозможно без вызова Context.DeleteObject ().Я полагаю, что это не настоящий POCO-способ, поскольку моя модель предметной области не должна учитывать мою постоянную инфраструктуру.

У кого-нибудь есть решение этой проблемы?

Приветствия, Мош

Ответы [ 2 ]

1 голос
/ 16 июня 2011

Однако я понял, что это не можно без звонка Context.DeleteObject (). Я верю этому это не настоящий путь POCO, как мой домен модель не должна знать о моем постоянная инфраструктура.

Я бы не стал следовать вашей интерпретации. Если у вас есть коллекции заказов и элементов заказов в памяти (игнорируя инфраструктуру постоянства), разница в том, что вы удаляете элемент только из коллекции элементов заказа или также удаляете элемент из хранилища в памяти. Возможно, вы захотите удалить элемент только из одного заказа, оставить его существующим и назначить его другому заказу. (Это, вероятно, не имеет особого смысла в случае заказов и элементов заказа, но это бизнес-логика, и ваши POCO и их отношения не могут знать, что вы хотите удалять элемент из хранилища каждый раз, когда вы удаляете его из заказа.)

Итак, вы должны четко указать, что элемент должен быть удален из хранилища - для хранилища в памяти, а также для хранилища, связанного с постоянством. Вы должны позвонить по номеру DeleteObject, обходного пути не существует.

0 голосов
/ 16 июня 2011

Какую ссылочную целостность вы настроили в БД?Вы только попросили удалить элемент заказа из элемента, но не удалить его, и именно это и происходит.

...