【问题标题】:Exception when deleting an object in database删除数据库中的对象时出现异常
【发布时间】:2016-11-01 02:13:04
【问题描述】:

首先,对不起我的英语。这不是我的第一语言。我正在尝试删除数据库中的数据,但在调用 SaveCahnges 时收到异常。

EntityFramework.dll 中出现“System.Data.Entity.Infrastructure.DbUpdateException”类型的异常,但未在用户代码中处理`

这是一个内部异常消息

InnerException {"DELETE 语句与 REFERENCE 约束冲突 \"FK_dbo.OfferImages_dbo.Offers_Offer_Id\"。冲突发生在数据库 \"aspnet-LivrETS-20160629111902\",表 \"dbo.OfferImages\",列 ' Offer_Id'。\r\n语句已终止。"} System.Exception {System.Data.SqlClient.SqlException}

这是我的仓库

public void DeleteOffer(string[] Ids)
    {
        foreach (string Id in Ids)
        {
            Offer offer = GetOfferBy(Id);
            _db.Offers.Remove(offer);
        }

        _db.SaveChanges();
    }

我使用 AJAX 从我的 javascript 代码中调用此函数。

我的迁移已更新,但我的数据库中有一些表不在我的模型中,因为我安装了一个随其表一起提供的依赖项 (hangFire)。

谢谢

【问题讨论】:

  • 发生异常时,转到InnerException消息并将其复制到您的问题中。
  • 我认为如果一个项目会破坏非级联的约束,则无法删除它......
  • 内部异常概述了问题,并且 FK 的命名方式易于找到问题的根源。您的表 (OfferImages) 具有对其他表 (Offers) 的外键引用。如果不首先删除 OfferImages 表中的一个或多个条目,就无法删除 Offers 表中的条目,这与您的数据库当前的结构方式相同。
  • 感谢您的帮助

标签: c# asp.net sql-server asp.net-mvc entity-framework


【解决方案1】:

我认为您正在尝试删除 Offer 表中的一行,但 OfferId 是另一个表的外键(根据 exeption,它是 Offer Images)。 要从 Offer 表中删除一行,您必须先删除 OfferImages 中包含该 offerId 的所有行。

但在我看来,您应该添加一个名为 ActiveFlag (bit) 的列,要删除该列,您只需将 ActiveFlag 更改为 false。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 2016-12-20
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    相关资源
    最近更新 更多