2011-08-28 184 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