【问题标题】:Delete the foreign key data when the data in the foreign table is deleted删除外表中的数据时删除外键数据
【发布时间】:2016-07-06 20:31:31
【问题描述】:

我有2个数据库表,我希望当我删除外键指向的表中的数据(主键所在的位置)时,指向该数据的外键也被删除。

    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> DeleteConfirmed(int id)
    {

        Report report = await db.Reports
            .Include(i => i.RepFilters)
            .Where(i => i.ID == id).SingleAsync();

        db.Reports.Remove(report);

        await db.SaveChangesAsync();
        return RedirectToAction("Index");
    }

外键不可为空。

(我得到的错误)

如何做/解决这个问题? (帮我写正确的标题)

【问题讨论】:

  • 可以在DB Server的主表上配置级联删除
  • 我想在不打开 SQL Server MS 的情况下进行操作。我想用 LINQ 来做

标签: asp.net-mvc linq linq-to-entities entity-framework-6 ado.net-entity-data-model


【解决方案1】:

如果您不想通过 SQL 服务器执行此操作,则必须加载 db context 中的所有子对象并删除它们。

【讨论】:

  • .Include(i =&gt; i.RepFilters) 不这样做吗?
  • 可能还有其他子对象?
  • nope.. 有 2 个表:报告和 RepFilters。 RepFilters 有一个指向 Reports 的外键,并且该外键不可为空
  • 我可能不太清楚,您必须删除每个子对象,然后删除父对象,然后删除 save change
【解决方案2】:

当 .Net 或 EF 为您的上下文生成代码时,

.WillCascadeOnDelete()

设置为 false,所以只需将其更改为 true 并尝试是否有效。

【讨论】:

    【解决方案3】:

    您的外键应配置为 关于删除 CASCADE 关于更新 CASCADE。

    【讨论】:

    • 你到底是什么意思?你能说得更具体点吗?
    • 查看您的外键。
    猜你喜欢
    • 2014-02-09
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2017-04-07
    • 1970-01-01
    相关资源
    最近更新 更多