Сначала вы упомянули код EF, что означает EF 4.1, но вы показали пример удаления объекта в EF 4. Правильный подход к удалению объекта в EF 4.1 без загрузки его из базы данных:
var category = new Category() { CategoryId = 1 };
context.Categories.Attach(category);
context.Categories.Remove(category);
context.SaveChanges();
Если выничего не изменив в конфигурации соглашений по дефолту, он также удалит все связанные продукты, потому что OneToManyCascadeDeleteConventions
гарантирует, что все отношения один-ко-многим созданы с ON CASCADE DELETE
.Не будет никаких дополнительных обращений к базе данных - только один оператор DELETE
для Category
с Id
= 1.
Может возникнуть другая ситуация, если вы хотите удалить полностью загруженный Category
(с загруженнымProducts
свойство навигации) в этом случае EF создаст отдельную инструкцию удаления для каждого Product
, поэтому у вас будет N + 1 круговых обращений к базе данных, где N - количество товаров в категории. Здесь - это то, как работает каскадное удаление в EF.Он связан с разработчиком сущностей, но описанные принципы совпадают.