当我尝试调用两个方法并且每个方法都在数据库中进行查询时,我的应用程序出现了问题。
这些方法使用了using语句,所以在使用后关闭了连接。
我创建了一个DapperContext,并通过构造函数使用simple injector进行初始化:
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);
}
在Repository类中,有一种方法将执行2个不同的Sql,并且这两个Sql分别在它们自己的方法中指定。基本上,每一个都像这样初始化:
using (IDbConnection conexao = dapperContext.DapperConnection)
{
... runs a query
}
当我调用第一个方法时,查询运行得很好,但是当调用第二个方法时,在DapperConnection属性中,在_connection.Open()中发生错误,因为_connectionString为空。最好的方法是什么?我知道由于Dispose方法,connectionString丢失了,但是由于我使用SimpleInjector创建我的实例,并且这是按请求执行的,所以我只会在另一个请求中再次拥有这个connectionString。