C#,SQL Server:INSERT语句与FOREIGN KEY约束冲突

时间:2016-09-02 09:24:37

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

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

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

我的单元测试的场景如下:

  1. 数据库表A与其他表有多个多对一关系
  2. 数据库表A的 FK s,指向其他表的 PK
  3. 所有数据行都已正确插入并提交到其他表格( PK Guids 是唯一的)
  4. 使用C#进行调试时,所有数据库表A FK s Guid 值都已正确设置为C#context.TableA.Add(item)语句
  5. 使用SQL Server Profiler进行调试时,创建的SQL INSERT 语句在语句中为每个 FK 提供了正确的 Guid
  6. 结果, INSERT 语句给出了 FOREIGN KEY约束错误消息。 INSERT 在其中包含每个FK 时失败,只有在我删除所有 FK 后, INSERT 才会成功来自表A。

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

    这里有一些表A的统计数据

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

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

1 个答案:

答案 0 :(得分:0)

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

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

我画了一张从表A到另一张表的关系。该关系有两个密钥连接如下

表A< --------------------------------> CustomerAddress

PK Guid

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属性),然后重新创建数据库创建脚本。