Возможна ли серийная или объемная вставка в Linq 2 Sql? - PullRequest
1 голос
/ 28 августа 2011

Мой сценарий немного странный, у меня есть список сущностей, скажем, у меня есть десять элементов в списке, которые пойдут в три разные таблицы, связанные друг с другом.Я использую Linq 2 Sql, и мне нужно вставить его в один удар вместо нескольких итераций.

Возможно ли это.Я слышал, в BLtoolkit есть метод InsertBatch (), который выполняет массовую вставку.Ничего похожего в L2S.

Ответы [ 2 ]

2 голосов
/ 28 августа 2011

Есть InsertAllOnSubmit.С Linq To SQL вы просто устанавливаете свойства, которые хотите изменить для обновления.Тогда звонок по номеру SubmitChanges сделает за вас все остальное ..

1 голос
/ 29 августа 2011

Короче говоря: нет, это невозможно.

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 для пакетных заданий самостоятельно.

...