2016-10-10 76 views
0

我在嘗試調用兩個方法並在數據庫中執行查詢時遇到問題。 這些方法使用using語句,所以它在使用後關閉連接。小巧玲瓏,避免「連接字符串屬性尚未初始化」錯誤

我創建了一個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); 
} 

在Repository類中,有一個方法將執行2個不同的Sqls,並且在它的方法中每個指定2個sqls。 基本上,每一個初始化這樣的:

using (IDbConnection conexao = dapperContext.DapperConnection) 
{ 
... runs a query 
} 

當我調用的第一個方法中,查詢很好地運行,但是當第二mehod被調用時,在DapperConnection屬性,一個誤差在_connection.Open發生() ,因爲_connectionString是空的。

避免此錯誤的最佳方法是什麼?我知道connectionString因Dispose方法而丟失,但由於我使用SimpleInjector來創建我的實例,並且這是通過請求完成的,所以我只會在另一個請求中再次使用此connectionString。

回答

1
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; 
    } 
} 
+0

嘿謝爾蓋,我這樣做的Dispose方法,所以至少_connectionString不是空的了,所以我能夠創建再次連接,沒有錯誤。 – Maturano

相關問題