【问题标题】:How to resolve conflict during deleting records from database using entity framework?使用实体框架从数据库中删除记录时如何解决冲突?
【发布时间】:2013-10-08 10:30:23
【问题描述】:

DELETE 语句与 REFERENCE 约束冲突 >“FK_dbo.VendorDocuments_dbo.VendorModels_VendorId”。冲突发生在数据库 >“aegisv”、表“dbo.VendorDocuments”、列“VendorId”中。 声明已终止。

意味着我有一个 VendorModel 表,其中包含 invoicedocument 列表(它是具有表供应商模型外键 vendorId 的模型)。当我试图从数据库中删除供应商模型时,我遇到了异常。

我尝试了各种方法,但还没有解决。

已添加以下代码,但不起作用。

      modelBuilder.Entity<VendorDocument>()
            .HasRequired(x => x.VendorModel)
            .WithMany(u => u.VendorDocumemts)
            .WillCascadeOnDelete();

请任何人都可以帮助我..谢谢。

【问题讨论】:

  • 您可以发布您的删除操作吗?可能是当您为删除加载模型时,您没有包括相关实体。
  • 你的外键可以为空吗?

标签: sql-server entity-framework


【解决方案1】:

只需在这里更改一点代码,试试吧:-

 modelBuilder.Entity<VendorDocument>()
            .HasOptional(j => j.VendorModel)
            .WithMany(u => u.VendorDocumemts)
            .WillCascadeOnDelete(true);

【讨论】:

  • Dude 尝试过同样的方法,现在我在登录期间遇到了以下异常。多重性与角色“VendorDocument_VendorModel_Target”中的引用约束冲突
【解决方案2】:

您还必须在数据库上启用级联删除规则。 EF 不负责在数据库中级联删除。

EF负责SaveChanges()之后的ObjectContext的正确性。因此,EF 尝试将 ObjectContext 与数据库中预期级联后的预期数据库状态同步。

所以如果您在模型中创建了级联删除规则,则必须在数据库中配置级联删除规则。 Tip 33

在数据库中启用级联删除规则 -Enable CascadeDelete

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2013-01-15
    相关资源
    最近更新 更多