2011-08-28 119 views
1

我的场景有点奇怪,我有一个实体列表,说我有十个项目在列表中,将转到三个不同的表格,相互关联。我正在使用Linq 2 Sql,我需要将它插入一次而不是多次迭代。是否可以在Linq 2 Sql中批量或批量插入?

这是可能的。我听说在BLtoolkit中有执行批量插入的InsertBatch()方法。任何类似的L2S。

+0

对于批处理操作,Linq-to-SQL不支持**。使用[SqlBulkCopy'类](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx)进行批量插入 - 它更适合于任务 –

回答

1

总之:不,这是不可能的。

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。

+1

实际的数据库交互实际发生在SubmitChanges上。 InsertOnSubmit和InsertAllOnSubmit只是将发生提交时的工作单元更改排队。当我们与数据库进行交互时,然而每个请求都会单独发送到数据库(以允许以每个记录为基础进行事务性回滚)。同意SqlBulkCopy/SSIS/Ado.Net TableParameters(http://msdn.microsoft.com/zh-cn/library/bb675163.aspx)作为批量插入的更好选项。 –

+0

好的补充 - 既然你写了这本书,我不会指望别的:) – Pleun

2

InsertAllOnSubmit。使用Linq To SQL,您只需设置要更新的属性即可。然后打电话SubmitChanges会为你做其余的事情。

+0

它将工作在多张桌子上还是只有一张? –

+0

它通过一个上下文处理所有表格。只要试一试... –

+1

InsertAllOnSubmit基本上只是每次调用InsertOnSubmit。不做批量插入。 – Pleun