【问题标题】:How to know which table preventing me from deleting a row with Entity Framework 6?如何知道哪个表阻止我使用 Entity Framework 6 删除一行?
【发布时间】:2016-12-27 06:52:35
【问题描述】:

我在我的项目中使用 EF 6,当我想从表中删除一行时,它会引发异常,因为该行在另一个表中被引用。我想知道哪个表阻止我使用 c# 代码和 EF 删除。

我们在表 A 中有一条记录,并且该行在表 C 中而不是在表 B 中引用。EF 是否有可能知道表 C 阻止我删除该行?

我也在使用 Sql-Server 2012。

【问题讨论】:

  • 思路三:解析异常;首先读取实体并检查子实体;开启级联删除
  • 如果在服务器中创建了关系,数据库服务器(不是 EF)会阻止删除父表。运行该脚本以了解关系:stackoverflow.com/a/8095137/3142139.

标签: c# sql-server entity-framework


【解决方案1】:

如果您尝试在运行时动态排序以显示用户或在删除尝试之前确定,并且您不确定可能的冲突,您可以使用 sys 表和一些动态 sql 来解决这个问题。

  1. 使用sys.objects 查找您的表名并获取object_id。
  2. 使用sys.foreign_keys 查找引用您的表格的表格。
  3. 使用 sys.foreign_key_columns 获取引用的确切列号。
  4. 使用sys.columns 获取适当的列名。
  5. 构建动态 SQL 以搜索表名和列名,并使用源行中无法删除的值查找违规行。
  6. 列出在sys.objects 中查找返回的表。 (可选)列出行数。
  7. 可选择使用动态 SQL 来构建其他语句(例如,删除违规记录 - 这可能需要递归 - 注意这一点 - 您可能会丢失大量数据!

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多