gpt4 book ai didi

sql-server - 是否有任何选项可以使用 Entity Framework (sql server 2008 r2 目标)对多个相关表进行批量插入?

转载 作者:行者123 更新时间:2023-12-03 16:25:09 27 4
gpt4 key购买 nike

现有选项可用于将批量插入到具有 EF 实体的单个表中。具体来说,this SO question并使用 this class from David Browne .

然而,在尝试将行批量插入到父表和子表的情况下,没有任何东西可以作为同样方便的选项。

我能想到的“技巧”(但我希望至少有一个更好的选择)包括:

  1. 在插入之前生成 PK 并设置 FK(在这种情况下,我们知道没有其他任何东西同时插入),然后对两者进行批量插入(如有必要,在父插入期间关闭 IDENTITY_INSERT)
  2. 批量插入(使用链接的 SO 问题的方法)父行,选择它们(足够的列来识别哪个父行是哪个),生成子行,批量插入那些
  3. 生成在单个批处理中插入所有行所需的 sql,先执行每个父项,然后执行所有相关的子项,使用@@identity 为子项插入填写 FK

“预生成 PK 值”方法(我还没有真正尝试过)看起来不错,但是很脆弱(在操作期间至少不需要向父级插入其他内容)并且取决于空表或选择 max(pk )+1 。

SqlBulkCopy似乎是围绕一次插入一个表构建的(如 bcp),任何仍然让 sql 生成 PK/identity 列的东西似乎都是围绕“下拉”到 ado.net 并构建 sql 构建的。

除了我缺少的“生成大量 sql”之外,是否还有其他选项?如果没有,是否有已经生成用于批量插入相关表的 sql 的东西?

谢谢!!

最佳答案

任何外键约束的第一条规则是,在插入外键表之前,它必须作为主键或唯一约束存在于另一个表中。

当您一次添加几行时(传统事务处理环境),这非常有用。然而,您正试图同时批量插入两者。我将其称为批处理。基本上,父表上的批量更新锁将阻止子表读取它以检查 fk 链接是否有效。

我会说您的 2 个选项是 1.) 完全不使用 fk 或 2.) 在批量插入之前将 fk 设置为 nocheck,然后在使用更改表完成批量插入后打开检查。

关于sql-server - 是否有任何选项可以使用 Entity Framework (sql server 2008 r2 目标)对多个相关表进行批量插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8554403/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com