【问题标题】:C#, SQL Server: The INSERT statement conflicted with the FOREIGN KEY constraintC#、SQL Server:INSERT 语句与 FOREIGN KEY 约束冲突
【发布时间】:2016-09-02 09:24:37
【问题描述】:

我正在使用 C#、Entity Framework 和 SQL Server 编写数据库访问方法。

数据库更新后,我开始收到奇怪的“INSERT 语句与 FOREIGN KEY 约束冲突”错误消息。在 Visual Studio 中执行单元测试时,我注意到只有一个数据库表 A 的错误。

我的单元测试场景如下:

  1. 数据库表 A 与其他表有多个多对一关系
  2. 数据库表A有FK,指向其他表的PK
  3. 所有数据行均已正确插入并提交到其他表(PK Guids 是唯一的)
  4. 使用 C# 调试时,所有数据库表 A FKGuid 值都已为 C# context.TableA.Add(item) 语句正确设置
  5. 使用 SQL Server Profiler 进行调试时,创建的 SQL INSERT 语句对于语句中的每个 FK 都有正确的 Guid 值李>

因此,INSERT 语句给出了 FOREIGN KEY 约束 错误消息。 INSERT 失败 每个 FK,只有在我删除所有 FKINSERT 才成功s 来自表 A。

因此,我认为我的 SQL 服务器或表 A 可能有问题。

这是表 A 的一些统计数据

  1. 大约有 80 列
  2. 每行大约 10 kB 大
  3. 执行 INSERT 时表为空

我很乐意收到任何有关此项目进展的提示!

【问题讨论】:

  • 您能向我们展示一下表 A 的表设计以及它使用 FK 引用的表吗?
  • 所有其他值中的 FK 是否设置为它们附加到的正确 A(在运行时)?
  • 表 A 上的 80 列?哇,这么多列!

标签: c# sql-server entity-framework foreign-keys sql-insert


【解决方案1】:

感谢您的帮助。我想我找到了解决问题的方法。

我正在使用 DeZing for Databases 工具进行数据库设计和数据库创建脚本的创建。

我已经绘制了从表 A 到另一个表的关系。该关系有两个键连接如下

表 A 客户地址

PK 指导

FK CustomerAddressGuid PK Guid

FK CustomerGuid FK CustomerGuid

现在订购 DeZing for Databases 工具

FK CustomerGuid FK CustomerGuid(FK 关系优先)和

FK CustomerAddressGuid PK Guid(PK 关系如下)

因此,即使值正确,INSERT 也会失败,因为 FK - FK 关系在 PK - FK 之前。

很遗憾,DeZing 工具没有自动解决这种情况,并且关系顺序在工具中不容易看到。

解决的办法是在工具中重新排列链接属性的顺序(先PK属性),然后重新创建数据库创建脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多