通过T-SQL查询的外键关系删除对象

时间:2012-09-25 03:26:26

标签: sql sql-server entity-framework tsql

寻找一种方法将以下LinQ编写为实体查询作为T-SQL语句。

repository.ProductShells.Where(x => x.ShellMembers.Any(sm => sm.ProductID == pid)).ToList().ForEach(x => repository.ProductShells.Remove(x));

下面显然不正确,但我需要删除相应的ProductShell对象 任何ShellMember都包含一个等于传入变量pid的ProductID。我认为这将涉及一个连接语句来获取相关的ShellMembers。

repository.Database.ExecuteSqlCommand("FROM Shellmembers WHERE ProductID={0} DELETE FK_ProductShell", pid);

我为FK_ShellMembers_ProductShells外键启用了级联删除,因此当我删除ProductShell时,它将删除与之关联的所有ShellMembers。我将把这个语句传递给System.Data.Entity Database.ExecuteSqlCommand方法。

1 个答案:

答案 0 :(得分:1)

您应始终显示表结构和外键链接。 但是,它看起来应该是这样的。

这假设两个表之间的链接是productshell.shellid = shellmembers.shellid

delete productshell
where shellid in (
    select shellid
    from shellmembers
    where productid={0}
    )

它也可以写成连接

delete productshell
from productshell
join shellmembers on productshell.shellid=shellmembers.shellid
where shellmembers.productid={0}