У меня проблема в моем приложении, когда я пытаюсь вызвать два метода, и каждый из них выполняет запрос в базе данных. Эти методы используют оператор using, поэтому он закрывает соединение после использования.Dapper, избегая «Не удалось инициализировать свойство connectionstring»
Я создал DapperContext, и я использую простую форсунку для инициализации, с помощью конструктора:
public DapperContext(int idPortal)
{
_connectionString = GetERPConnectionString(idPortal);
}
Чтобы открыть соединение и сделать запрос в базу данных, я создал свойство как это:
public IDbConnection DapperConnection
{
get
{
if (_connection == null)
{
_connection = new SqlConnection(_connectionString);
}
if (_connection.State != ConnectionState.Open)
{
_connection.Open();
}
return _connection;
}
}
Этот DapperContext имеет Dispose метод, в котором он закрывает соединение:
public void Dispose()
{
if (_connection != null && _connection.State == ConnectionState.Open)
{
_connection.Close();
}
GC.SuppressFinalize(this);
}
В классе Репозитория существует метод, который будет выполнять 2 различных Sqls, и эти 2 sqls указаны каждый в своем методе. В принципе, каждый из которых инициализируется так:
using (IDbConnection conexao = dapperContext.DapperConnection)
{
... runs a query
}
Когда я называю первый метод, запрос выполняется хорошо, но когда второй mehod называется, в свойстве DapperConnection, ошибка происходит в _connection.Open() , потому что _connectionString пуст.
Каков наилучший способ избежать этой ошибки? Я знаю, что connectionString теряется из-за метода Dispose, но поскольку я использую SimpleInjector для создания моего экземпляра, и это делается по запросу, я снова буду иметь это connectionString в другом запросе.
Эй Сергей, я сделал это в методе Dispose, так, по крайней мере _connectionString не пусто больше, так что я был в состоянии создать _соединение снова без ошибок. – Maturano