Как Dapper выполняет запрос без явного открытия соединения? - PullRequest
0 голосов
/ 27 января 2019

Мы используем Dapper для некоторых действий по доступу к данным и используем стандартный рекомендуемый подход для подключения к базе данных следующим образом:

public static Func<DbConnection> ConnectionFactory = () => new SqlConnection(ConnectionString);

Однако, если мы пытаемся выполнить оператор, в документах, которые он показываетчто вам нужно сначала указать:

using (var conn = ConnectionFactory())
{
   conn.Open();
   var result =  await conn.ExecuteAsync(sql, p, commandType: CommandType.StoredProcedure);
   return result;
}

Это означает, что вы должны явно открыть соединение.Однако, если мы опускаем оператор conn.open(), он также работает, и мы беспокоимся, если в таких случаях соединение не удастся утилизировать должным образом.

Буду признателен за любые комментарии о том, как выполняется SQL без явного открытия любого соединения.

1 Ответ

0 голосов
/ 29 января 2019

Dapper предоставляет два способа обработки соединения.

Первый - разрешить Dapper обрабатывать его.
Здесь вам не нужно открывать соединение перед отправкой в ​​Dapper.Если входное соединение не находится в открытом состоянии, Dapper откроет его - Dapper выполнит действия - Dapper закроет соединение.

Это просто закроет соединение. Открыть / Закрыть - это отличается от утилизации.Так что, если вы действительно хотите утилизировать соединение, лучше переключитесь на второй способ.

Второй - обрабатывайте все самостоятельно.
Здесь вы должны явно создать, открыть, закрыть и утилизировать соединение самостоятельно.

Для получения более подробной информации перейдите по следующим ссылкам:
https://stackoverflow.com/a/51138718/5779732
https://stackoverflow.com/a/41054369/5779732
https://stackoverflow.com/a/40827671/5779732

...