【问题标题】:How do I delete records in a dependent table from within VB/C# EF code?如何从 VB/C# EF 代码中删除依赖表中的记录?
【发布时间】:2015-08-20 21:45:14
【问题描述】:

VS2013 更新 4、VB(或 C#)、EF 6.0、SQL、LINQ

这对我来说是一个很难以明确的方式提出的问题,因为我不确定要使用的正确术语。它的总和是我的代码删除了记录中的项目,但将辅助表中的指针设置为 NULL 而不是删除那里的记录。以下是我的模型和代码的简单表示。

Public Class DbContext
  Public Property records As DbSet(Of record)
End Class

Public Class record
  Public Property recordID As Integer
  Public Property DataItems As New List(Of DataItem)
End Class

Public Class DataItem
  Public Property DataItemID As Integer
  Public Property Data As Integer
End Class

如果我使用 .Remove() 执行代码,记录中的每条记录都会以 0 个 DataItems 结束(我可以在 VS 调试模式下看到),但 DataItem 表仍然充满了记录,所有记录都带有 NULL 指针。 (在最初的帖子和评论中提到的错误代码被删除后,此段落发生了变化)

我知道我可以在公共类 DbContext 中添加以下内容:

Public Property DataItems As DbSet(Of DataItem)

然后我可以检查并删除所有具有 NULL 指针的 DataItems,但这似乎不是它应该完成的方式,所以我寻求帮助以了解在这种情况下我应该如何编码.

在 LINQ 中是否有适当的方法从 List 中删除记录,以便实际记录也被删除,而不是仅仅将指针设置为 NULL?

【问题讨论】:

  • 您实际上并没有删除任何记录,您删除的是每条记录中的DataItems。同样令人惊讶的是,For Each 循环不会引发任何异常,因为您在循环遍历集合时尝试修改集合(至少在 c# 中会引发异常)。如果要清除所有记录,何不试试RemoveRemoveRange 方法呢?要清除所有记录,试试这个db.records.RemoveRange(db.records)
  • 其实并不奇怪——我把错误的代码复制到了帖子中!!是的,该代码按预期抛出了异常。但是在我正确地重写它之后,它仍然没有删除记录。我现在就试试你的建议。
  • @Hopeless。您的 .RemoveRange() 解决方案对我来说是正确的答案。在进行更多测试后,我将跟进一些额外的 cmets,但您可能希望将您的评论放入我可以标记为答案的答案中。
  • 虽然删除返回指针中具有 NULL 的记录的解决方案效果很好,但我仍然有关于删除辅助表或子表中的记录的问题,在这种情况下是 DataItems 表(表示数据库集)。从各个记录中删除数据项后,是否必须“手动”删除这些内容?如果是这样,那是为什么?换句话说,为什么不从记录中的 List(Of DataItem) 中删除 DataItem 也会从 DataItems 表中删除该行?谢谢。
  • 这取决于您如何设计数据库。我不确定是否存在任何关系(以及您拥有的实际数据库表)。关于父子关系,如果删除父子关系,则必须先手动删除子子节点,除非您设置关系级联删除。通过这种级联,当父母被删除时,孩子将被自动删除。 LinqToEntity 删除时不会处理关系,你应该按照我说的建立正确的关系。

标签: mysql vb.net linq entity-framework


【解决方案1】:

为了给有同样问题的其他人提供答案,上面的 cmets 提供了对我有用的解决方案。我不得不手动删除孩子,在其他情况下创建一个方法来搜索和删除返回指针中带有 NULL 的记录。使用 RemoveRange() 的建议效果很好。虽然设置级联删除似乎是一个很好的解决方案,但我不想在 SSMS 中手动设置它,所以我现在进行手动删除,直到有人可以从模型定义中解释如何在 EF 中进行设置。

【讨论】:

    猜你喜欢
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 2013-12-12
    • 2011-04-28
    • 2011-04-14
    相关资源
    最近更新 更多