Я использую Dapper ORM для операций с базой данных в моем основном проекте веб-API asp.net. Прямо сейчас я открываю новое соединение с базой данных каждый раз и использую его внутри блока using, чтобы они были удалены, когда область действия закончится. Но я хотел обрабатывать все эти соединения без использования блока using, а также хотел избавиться от них автоматически. Я искал способ добиться этого, используя внедрение зависимостей, поскольку они автоматически удаляют объекты, реализующие IDisposable.
Вот как я обрабатываю все подключения к БД:
Создал свойство GetConnection в моем базовом репозитории:
private IDbConnection _connection;
public IDbConnection GetConnection
{
get
{
_connection = new NpgsqlConnection("Connection String");
return _connection;
}
}
Доступ к свойству внутри с помощью блока:
public async Task<IEnumerable<T>> GetAllAsync()
{
IEnumerable<T> records = null;
using (IDbConnection connection = GetConnection)
{
//db operations
}
return records;
}
Итак, как я могу добиться того же, используя внедрение зависимостей, которое будет инициализировать IDbconnection, когда это необходимо, и избавиться от него в конце запроса без необходимости инкапсулировать IDbconnection внутри блока using?
Короче говоря, я хочу избежать использования свойства GetConnection каждый раз для создания объекта базы данных и исключить использование блоков using для его удаления.
using
блоков? Предлагаемые передовые методы на самом деле основаны на мнении, но вы можете взглянуть на это. Я думаю, вы ищете шаблон UoW-Per-Request. Решение, указанное в ссылке, поможет вам в этом. - person Amit Joshi   schedule 19.11.2019