2012-01-30 3 views
5

Я использую базу данных Northwind. У меня есть этот код:Entity Framework Cascading Deletes & Lazy Загрузка

var db = new NorthwindEntities(); 
int id = 2; // Example 
var delObject = (from o in db.Orders.Include("Order_Details") 
       where o.OrderID == id 
       select o).First(); 
db.Orders.DeleteObject(delObject); 
db.SaveChanges(); 
  • У меня есть (1-ко-многим) объединение в порядке - Order Details, с каскадных удаляет. (Если я удалю один заказ, все Order_Details с тем же OrderID будут удалены).

  • У меня LazyLoading включен.

Если я удаляю .Include("Order_Details") в ЕКЕ, то каскадное удаление не будет работать.

Почему это происходит? Не ленивая инициализация должна «включать» Order_Details для меня и в конечном итоге позволить мне каскад удалять?

+0

Nope. По моему опыту, каскадное удаление применяется только к объектам памяти. – cadrell0

ответ

5

Каскадные удаления определены в вашей модели EF.

EF будет генерировать операторы удаления для данных, которые он загрузил. EF не пойдет в базу данных, чтобы проверить, что он должен удалить.

Вы можете определить каскадные удаления (в зависимости от вашей базы данных) на уровне базы данных. В этом случае EF удалит верхний узел, и база данных удалит связанные строки.

1

У вас есть каскадное удаление, определенное как в базе данных, так и в конфигурации объекта? Я видел, где это определяется только одним, а не другим, может вызвать эту проблему.

+0

Действительно, это заставило его работать, но почему это происходит? – ColdFusion

1

Каскадные удаления в EF-модели удаляют только те детали, которые были загружены в контексте. В случае, если вы используете Include Order_Details, загружаются во время запроса вместе с Orders. Если вы включили LazyLoading и не используете Include, они загружаются по мере необходимости, т. Е. Когда вы ссылаетесь на свойства навигации. Таким образом, если вам не нужны детали и согласны с тем, что они будут автоматически удалены с помощью основной записи, вам необходимо определить каскадное удаление как в модели EF, так и в схеме DB.

Смежные вопросы