Ответ 1
Сначала вы указали код 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();
Если вы ничего не изменили при настройке соглашений об defalut, оно также удалит все связанные продукты, потому что OneToManyCascadeDeleteConventions
гарантирует, что все отношения "один ко многим" создаются с помощью ON CASCADE DELETE
. Не будет никаких дополнительных обращений к базе данных - только один оператор DELETE
для Category
с Id
= 1.
В случае, если вы хотите полностью загрузить загруженный Category
(с загруженным атрибутом Products
), в противном случае EF создаст отдельную инструкцию delete для каждого Product
, чтобы вы имели N + 1 roundtrips до где N - количество продуктов в категории. Здесь описано, как каскадное удаление работает в EF. Это связано с дизайнером объекта, но описанные принципы одинаковы.