Using ObjectContext. I’m wanting to do this by passing an SQL query via the ExecuteStoreCommand since I don’t fancy retrieving all relevant entities just for the sake of deleting them after.
The Category table is as so:
CatID | CatName | ParentID
Where CatID is the primary key to the ParentID FK
I am wishing to delete a category and also all those that
are under it. Can be 2+ levels deep of sub cats, so different ParentID’s
Thought I could do it as below and just set “cascade” on delete option
for the foreign key in the database, but it won’t let me and it does not appear to want to
cascade delete down by using the CatID – ParentID relationship and the query gets
stopped by this very FK constraint.
public RedirectToRouteResult DelCat(int CatID)
{
if (CatID != 0)
{
_db.ExecuteStoreCommand("DELETE FROM Categories WHERE CatID={0}", CatID);
_db.SaveChanges();
}
return RedirectToAction("CatManage");
}
Recursive CTE allCategories produces list of all categories in hierarchy. Delete part, obviously, deletes them all.
Try it with
select * from allCategories, though, to check first.There is TEST @ Sql Fiddle.