Мне нужно было сделать Bulk insert с более щадящей радугой

Я использую расширения базы данных dapper rainbow,

private void insertList(IEnumerable<myObject> list)
    {
          using (SqlConnection conn = new SqlConnection(connectionString))
        {
            var db = myDB.Init(conn, commandTimeout: 100);
            db.myTable.tableName = "ds.myTable";
            Parallel.ForEach(dsList, a => db.myTableInsert(a)
                        );
            db.Dispose();
        }
    }

Это не сработает, я думаю, что мне нужно открыть и закрыть соединение внутри Parallel.ForEach. Это написать способ сделать это?

Я хотел использовать это расширение, оно очень полезно и полезно, но у меня возникла проблема с вставкой списка. Я не смог найти в Интернете ничего об использовании этого расширения, а также об использовании списка.

1 ответ

Решение

Как правило, соединения с базой данных НЕ являются поточно-ориентированными, поэтому параллельные вставки в одно и то же соединение могут вызвать проблемы.

Так что я бы сказал, что да, вам нужно будет открыть и закрыть соединение внутри Parallel.ForEach(), Возможно, вы захотите сравнить это. Я не совсем убежден, что параллельное выполнение вставок с несколькими подключениями к базе данных будет быстрее, чем регулярное выполнение цикла на одном подключении.

Другие вопросы по тегам