Linq 2 Sql 中可以批量插入吗?
我的场景有点奇怪,我有一个实体列表,假设列表中有十个项目,它们将进入三个不同的表,彼此关联。我正在使用 Linq 2 Sql,我需要将其插入一次而不是多次迭代中。
这可能吗。我听说,在 BLtoolkit 中有一个 InsertBatch() 方法可以执行批量插入。 L2S 中的任何类似内容。
My scenario is little bit wierd, I have a list of entities, say i have ten items in list which will go to three different tables , associated to each other. I am using Linq 2 Sql and I need to insert it in a single hit instead of multiple iterations.
Is this possible. I have heard, in BLtoolkit there is InsertBatch() method that performs a bulk insert. Anything similar in L2S.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
有
InsertAllOnSubmit
。使用 Linq To SQL,您只需设置要更改更新的属性。然后调用SubmitChanges
将为您完成剩下的工作。There is
InsertAllOnSubmit
. With Linq To SQL, you just set the properties you want to change for an update. Then callingSubmitChanges
will do the rest for you..简而言之:不,这是不可能的。
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 可能会更好。
In short: No, it is not possible.
InsertAllOnSubmit is basically just calling InsertOnSubmit each time. So that does not help a lot.
If you profile the generated SQL, you will see that you will get a lot of individual insert statements resulting in a lot of overhead. Regardless of using InsertOnSumbit or InsertAllOnSumbit.
If you google around, you will see some attempts to add SqlBulkCopy behaviour to Linq-2-sql. For example: http://blogs.microsoft.co.il/blogs/aviwortzel/archive/2008/05/06/implementing-sqlbulkcopy-in-linq-to-sql.aspx
However, I think you might be better of implementing SqlBulkCopy yourself for your batch jobs.