使用ObjectContext。我想通过ExecuteStoreCommand传递一个SQL查询来做到这一点,因为我不想仅仅为了删除它们而想要检索所有相关实体。
“类别”表格如下:
CatID | CatName | ParentID
其中CatID是ParentID FK的主键
我希望删除一个类别以及所有那些类别 在它之下。子猫的深度可以超过2级,所以不同的ParentID
以为我可以按照以下方式执行,只需在删除选项上设置“cascade”即可 对于数据库中的外键,但它不会让我和它似乎不想 通过使用CatID - ParentID关系级联删除并查询获取 被这个非常FK约束所阻止。
public RedirectToRouteResult DelCat(int CatID)
{
if (CatID != 0)
{
_db.ExecuteStoreCommand("DELETE FROM Categories WHERE CatID={0}", CatID);
_db.SaveChanges();
}
return RedirectToAction("CatManage");
}
答案 0 :(得分:1)
递归CTE allCategories生成层次结构中所有类别的列表。显然,删除部分会将它们全部删除。
; with allCategories as (
select CatID
from Categories
where CatID = @CatID_to_delete
union all
select Categories.CatID
from allCategories
inner join Categories
on allCategories.CatID = Categories.ParentID
)
delete Categories
from Categories
inner join allCategories
on Categories.CatID = allCategories.CatID
首先尝试使用select * from allCategories
进行检查。
答案 1 :(得分:0)
为什么不在您的批次中发送两个语句?
DELETE Categories WHERE ParentID = {0};
DELETE Categories WHERE CatID = {0};
如果您正在使用的框架“不允许”这样做,那么请执行此操作:将您的逻辑放在存储过程中,然后调用存储过程。