EF插入/更新后,外键变得不可信

时间:2017-05-05 11:55:16

标签: sql-server entity-framework

我们有一个ASP.NET Web应用程序首先使用EntityFramework代码来执行插入/更新,并且对于我们数据库的至少一些外键,只要我们使用EF插入行,它们就会变得不可信。

重要说明:

  • 没有任何外键被标记为不可复制
  • 约束未被明确禁用,然后重新启用,我知道如果我们禁用并重新启用,我需要执行“WITH CHECK CHECK CONSTRAINT all”
  • 发生这种情况时,我们不会进行批量插入

我已经尝试运行sql profiler来查看是否有任何奇怪的事情发生,我什么也没看到。我查看EF是否正在执行任何“MERGE”语句,因为我发现某些内容表明这些语句可能会使约束不受信任。我的理解是,如果没有一些解决方法,EF无论如何都不会做任何“MERGE”语句。我唯一可以想到的是,与默认设置不同的是,快照隔离功能已打开,但我没有发现任何可能影响FK信任的内容。

编辑:只想添加我已经运行SQL语句来重新信任FK,然后在Web应用程序中运行一个序列,使相同的FK回到不受信任状态。这是可重复的。

还有什么可能导致它或者我还有什么可以尝试确定它们为什么变得不受信任?

编辑:在我们使用EFUtilities库进行批量插入的调用树中深入研究,默认情况下,此库不启用或提供覆盖以启用对基础SQLBulkCopy对象的约束检查。我们已经分叉和修改了EFUtilities(原始项目在github上已经死了)库,为SqlBulkCopyOptions中的低音添加方法重载。

1 个答案:

答案 0 :(得分:1)

我们正在使用库EFUtilities进行批量插入,它不检查约束并且无法覆盖选项。我们最终分叉了代码库并对库进行了一些更改,以便能够将SQLBulkCopyOptions对象传递给InsertAll()方法。我们的项目只是离线存在,因此我没有github链接到我们特别做出的更改,但它与这些提交中的更改非常相似,只是我们默认我们检查约束:Adds support for SqlBulkCopyOptions on the 'InsertAll' interface. #35