Dapper с UOW - Не закрывайте соединения

dapper repository-pattern unit-of-work

Вопрос

Я реализовал свой DAL с Dapper, используя следующие

Внедрение Dapper

Но создается соединение с db каждым вызовом базы данных. Он не использует повторно пул соединений. Я считаю, что я закрыл и правильно установил соединение.

Это пример вызова из уровня сервиса

dtoList = unitofWork.RegionalSettingRepository.GetCurrencySymbols(); unitofWork.Commit(); // To close the connections

Это вызов репозитория

public List<CurrencySymbolDTO> GetCurrencySymbols()
    {
        List<CurrencySymbolDTO> dtoList = null;
        try
        {
            string strSQL = "SELECT * from CurrencySymbol";
            dtoList = this.Connection.Query<CurrencySymbolDTO>(strSQL, null, transaction: Transaction).ToList();
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
        finally
        {

        }
        return dtoList;
    }

Может кто-то, пожалуйста, скажите мне, почему много соединений создано для каждого вызова базы данных. Я использовал следующий SQL-запрос для отслеживания количества подключений

SELECT DB_NAME(dbid) as DBName, COUNT(dbid) as NumberOfConnections, loginame as LoginName FROM sys.sysprocesses WHERE DB_NAME(dbid) ='database name' GROUP BY dbid, loginame

заранее спасибо

Принятый ответ

Статья, которую вы упомянули, отлично подходит для изучения UoW с Dapper; Я сам начал изучать UoW с этой статьей. У меня были схожие проблемы, когда я выполнял его, чтобы выполнить свои бизнес-задачи, и немного изменил код. Вы можете найти подробный код в этом ответе.

С помощью этого кода вы получаете больше контроля над соединением / транзакцией; вы называете это следующим образом:

С транзакцией:

using(DalSession dalSession = new DalSession())
{
    UnitOfWork unitOfWork = dalSession.UnitOfWork;
    unitOfWork.Begin();
    try
    {
        //Your database code here
        unitOfWork.Commit();
    }
    catch
    {
        unitOfWork.Rollback();
        throw;
    }
}

Без транзакции:

using(DalSession dalSession = new DalSession())
{
    //Your database code here
}


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow