如何在linq中删除其pk是anothers fk的记录

时间:2011-08-31 07:09:48

标签: linq-to-sql

我的数据库包含

等字段
CId(PK- Auto Generated)
   IsSub(bit)
   PId(FK)

在这个结构中,Cid是自动生成的,如果新记录是cid的子记录,则Issub = true,而Pid = Cid的id。

现在,当我想删除没有子元素的记录时,它完美无缺。 但如果有嵌套记录,那么它会显示错误。

如何删除具有嵌套记录的记录。      CID IsSub PID

  1         FALSE   null
  2         FALSE   null
  3         TRUE    2
  4         TRUE    2

在上面我如何删除CID = 2?

我的代码是 v

ar del = context.DataTable.Where(c => c.CId == userData.CId).Single();
                context.DataTable.DeleteObject(del);
                context.SaveChanges();

这将删除没有任何引用键的单个记录。 我该怎么做才能删除这两个 1)删除cid = 1

或删除cid = 2,也会删除cid = 3和4。

2 个答案:

答案 0 :(得分:0)

Linq2SQL没有固有的级联删除功能 - 您需要自己完成这项工作。一些想法herehere

答案 1 :(得分:0)

创建fk时,您可以指定在删除父项时是否应自动删除子记录或引发异常。 你的外键显然会引发例外。

有三种可能的解决方案:

  1. 更改外键,以便删除子记录。 (显然,您的数据库中缺少此功能)

  2. 在删除父记录之前手动删除子记录。

  3. 在删除父记录之前,将子记录的父记录设置为null(或父记录的父记录)。