【问题标题】:Scripting all data from database causing tons of Foreign Key Constraint conflicts when re-running对数据库中的所有数据编写脚本,在重新运行时导致大量外键约束冲突
【发布时间】:2012-08-14 15:28:16
【问题描述】:

我使用的是 EF 代码首先生成的数据库,它提供一些种子数据,并从其他数据库导入数据(一万行,因此在 EF 中播种没有意义)。为了简化流程,我想我可以只编写整个数据库数据的脚本。因此,如果我需要再次 DropCreate(现在我们使用迁移策略)我的数据库,我可以一次为我的所有数据播种。

但是,SQL Server 生成的脚本会导致大量此类冲突:

INSERT 语句与 FOREIGN KEY 约束冲突...

我可以想象这是因为我们的数据非常复杂,以错误的顺序插入数据会导致这种情况。有什么方法可以让 .sql 脚本在填充表之前忽略/关闭数据库的所有外键约束,然后在插入完成后重新打开它们?插入所有数据后应该没有约束问题。

【问题讨论】:

标签: sql sql-server sql-server-2008 ef-code-first sql-scripts


【解决方案1】:

是的,您可以暂时禁用外键:

ALTER TABLE MyTable NOCHECK CONSTRAINT FK_MyTable_MyKey

当你reenable the constraint时,你应该检查约束以确保没有违规,像这样(注意双重检查检查)

ALTER TABLE [MyTable] WITH CHECK CHECK CONSTRAINT FK_MyTable_MyKey

this post for a database-level solution

【讨论】:

  • 有没有办法在数据库级别而不是每个键上执行此操作?为每个键执行该行将需要很长时间,并且可能会根据我的表是否更改而改变。维持那个 hten 会很糟糕。
  • Nm,我看到 Reza 的评论指向它。 stackoverflow.com/questions/159038/…你能把它编辑到你的答案中,所以当我将它标记为接受时,它会包含所有内容吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 2017-12-31
相关资源
最近更新 更多