Возможна ли серийная или объемная вставка в Linq 2 Sql?
Мой сценарий немного странный, у меня есть список сущностей, скажем, у меня есть десять пунктов в списке, которые пойдут в три разные таблицы, связанные друг с другом. Я использую Linq 2 Sql, и мне нужно вставить его в один удар вместо нескольких итераций.
Это возможно. Я слышал, в BLtoolkit есть метод InsertBatch(), который выполняет массовую вставку. Ничего похожего в L2S.
2 ответа
Короче говоря: нет, это невозможно.
InsertAllOnSubmit в основном просто вызывает InsertOnSubmit каждый раз. Так что это не очень помогает.
Если вы профилируете сгенерированный SQL, вы увидите, что вы получите много отдельных операторов вставки, что приведет к большим накладным расходам. Независимо от использования InsertOnSumbit или InsertAllOnSumbit.
Если вы загляните в Google, вы увидите несколько попыток добавить поведение SqlBulkCopy в Linq-2-sql. Например: http://blogs.microsoft.co.il/blogs/aviwortzel/archive/2008/05/06/implementing-sqlbulkcopy-in-linq-to-sql.aspx
Тем не менее, я думаю, что вы могли бы лучше реализовать SqlBulkCopy для своих пакетных заданий.
Есть InsertAllOnSubmit
, С Linq To SQL вы просто устанавливаете свойства, которые хотите изменить для обновления. Потом звоню SubmitChanges
сделает все остальное за вас..