C# 整洁,避免;connectionstring属性尚未初始化";错误

C# 整洁,避免;connectionstring属性尚未初始化";错误,c#,asp.net-mvc,dapper,C#,Asp.net Mvc,Dapper,当我试图调用两个方法,而每个方法都在数据库中执行查询时,我的应用程序中出现了一个问题。 这些方法正在使用using语句,因此在使用后它会关闭连接 我创建了一个DapperContext,并通过构造函数使用simple injector进行初始化: public DapperContext(int idPortal) { _connectionString = GetERPConnectionString(idPortal); } 要打开连接并在数据库中执行查询,我创建了如下属性: pu

当我试图调用两个方法,而每个方法都在数据库中执行查询时,我的应用程序中出现了一个问题。 这些方法正在使用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;
    }
}
using (IDbConnection conexao = dapperContext.DapperConnection)
{
... runs a query
}
此DapperContext有一个Dispose方法,用于关闭连接:

public void Dispose()
{
    if (_connection != null && _connection.State == ConnectionState.Open)
    {
        _connection.Close();
    }

    GC.SuppressFinalize(this);
}
在Repository类中,有一个方法将执行两个不同的SQL,这两个SQL在其方法中分别指定。 基本上,每个都是这样初始化的:

public IDbConnection DapperConnection
{
    get
    {
        if (_connection == null)
        {
            _connection = new SqlConnection(_connectionString);                    
        }

        if (_connection.State != ConnectionState.Open)
        {
            _connection.Open();
        }

        return _connection;
    }
}
using (IDbConnection conexao = dapperContext.DapperConnection)
{
... runs a query
}
当我调用第一个方法时,查询运行得很好,但是当调用第二个方法时,在DapperConnection属性中,_connection.Open()中发生错误,因为_connectionString为空

避免此错误的最佳方法是什么?我知道由于Dispose方法,connectionString正在丢失,但由于我正在使用SimpleInjector创建我的实例,并且这是通过请求完成的,因此我将只在另一个请求中再次使用此connectionString

using (IDbConnection conexao = dapperContext.DapperConnection)
{
}
// -> conexao.Dispose() called on bound out, and _connection.Close(); is closed. 
它的结果是“_connection”关闭连接状态,无需重复使用。所以,如果您想让这段代码继续工作,那么Dispose方法应该如下所示:

public void Dispose()
{
    if (_connection != null && _connection.State == ConnectionState.Open)
    {
        _connection.Close();
        _connection = null;
    }
}

嘿,Sergey,我是在Dispose方法中这样做的,所以至少_connectionString不再是空的,所以我能够再次创建_连接,没有错误。