【问题标题】:Deleting objects through foreign key relationship with T-SQL query使用 T-SQL 查询通过外键关系删除对象
【发布时间】:2012-09-25 03:26:26
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: sql sql-server entity-framework tsql


    【解决方案1】:

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

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

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

    也可以写成join

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

    【讨论】:

      猜你喜欢
      • 2018-10-09
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多