【问题标题】:Is batch or bulk insert possible in Linq 2 Sql ?在 Linq 2 Sql 中可以批量或批量插入吗?
【发布时间】:2011-08-28 18:05:17
【问题描述】:

我的场景有点奇怪,我有一个实体列表,比如说我在列表中有十个项目,它们将转到三个不同的表,彼此关联。我正在使用 Linq 2 Sql,我需要将其插入单个命中而不是多次迭代中。

这可能吗。我听说,在 BLtoolkit 中有一个 InsertBatch() 方法可以执行批量插入。 L2S 中的任何类似内容。

【问题讨论】:

  • Linq-to-SQL 用于批处理操作。使用 the SqlBulkCopy class 进行批量插入 - 它更适合这项任务

标签: c# asp.net linq-to-sql bltoolkit


【解决方案1】:

InsertAllOnSubmit。使用 Linq To SQL,您只需设置要更改以进行更新的属性。然后致电SubmitChanges 将为您完成剩下的工作..

【讨论】:

  • InsertAllOnSubmit 基本上只是每次调用 InsertOnSubmit。不进行批量插入。
【解决方案2】:

简而言之:不,这是不可能的。

InsertAllOnSubmit 基本上只是每次调用 InsertOnSubmit。所以这并没有多大帮助。

如果您分析生成的 SQL,您会发现您将获得大量单独的插入语句,从而导致大量开销。无论使用 InsertOnSumbit 还是 InsertAllOnSumbit。

如果您四处搜索,您会看到一些尝试将 SqlBulkCopy 行为添加到 Linq-2-sql。例如:http://blogs.microsoft.co.il/blogs/aviwortzel/archive/2008/05/06/implementing-sqlbulkcopy-in-linq-to-sql.aspx

但是,我认为您最好自己为批处理作业实施 SqlBulkCopy。

【讨论】:

  • 实际的数据库交互实际上发生在 SubmitChanges 上。 InsertOnSubmit 和 InsertAllOnSubmit 只是在提交发生时将工作单元更改排队。但是,当我们确实与数据库交互时,每个请求都会单独发送到数据库(以允许基于每条记录的事务回滚)。同意 SqlBulkCopy/SSIS/Ado.Net TableParameters (msdn.microsoft.com/en-us/library/bb675163.aspx) 作为批量插入的更好选择。
  • 很好的补充——因为你写了这本书,所以我不会期待别的:)
猜你喜欢
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 2016-01-31
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多