Несколько вопросов про Dapper

354
27 января 2017, 04:31
  1. Поддерживает ли они подготовку запроса или каждый запрос компилируется по новой?

  2. Я правильно понимаю, что если соединение закрыто, то он его открывает на время выполнения запроса, а потом закрывает? Если соединение изначально открыто, то оно поддерживается, пока я сам его не закрою?

  3. В Dapper можно делать такое Execute("INSERT INTO Table(f1,f2) values(@f1,@f2)",List) где List- это список из нескольких объектов для вставки. Он будет по 1 записи вставлять или генерировать запросы из N строк List'a и вставлять?

Answer 1
  1. Компиляцией запросов занимается БД. Если говорить о подготовке, то нет, Даппер не подготавливает запросы. Однако есть некоторый внутренний кэш, который позволяет быстрее материализовывать объекты. При этом если вы используете параметры и выполняете один и тот же запрос много раз, кэш это учтет.

    Dapper caches information about every query it runs, this allow it to materialize objects quickly and process parameters quickly.

  2. Как верно отметил @vitidev, Даппер предоставляет методы расширения для соединения. Раньше он действительно не занимался управлением состояния соединения и требовал открытого соединения. Однако сейчас он открывает закрытые соединения (раз, два) и, соответственно, закрывает их. При этом ему по-прежнему можно передавать открытое соединение и документация ко многим методам до сих пор гласит, что требуется открытое соединение.

  3. Да, можно. Насчет того, как именно выполняется такая операция, не скажу. Надо или читать исходники, или пробовать и смотреть в профайлере. (Если вдруг нужно использовать bulk insert, есть дополнение Dapper Plus.)

    connection.Execute(@"insert MyTable(colA, colB) values (@a, @b)",
        new[] { new { a=1, b=1 }, new { a=2, b=2 }, new { a=3, b=3 } }
    ).IsEqualTo(3); // 3 rows inserted: "1,1", "2,2" and "3,3"
READ ALSO
Переменная в C#

Переменная в C#

Учусь C#, читаю чужой код и возник вопрос, что обозначают {0} таким символом, это элемент массива? Вот весь кусок

324
Повышение производительности DataTable

Повышение производительности DataTable

За счет чего можно достигнуть высокой производительности в DataTable при поиске в ней?

362
Временная сложность алгоритма List.AddRange()

Временная сложность алгоритма List.AddRange()

Из названия понятна суть проблемыИнтересует какова временная сложность алгоритма метода AddRange() списка в C#?

277