簡體   English   中英

SQLConnection 實例通過 Dapper 處理

[英]SQLConnection instances dispose via Dapper

我在我的項目中使用ASP.NET Web 表單統一進行 DI:

接下來,我在我的項目中安裝了Dapper ,通過我的 DAL 調用數據庫資源。 在我的 Startup 類中,我像這樣插入了 IDbConnection,以便 Dapper 可以在任何地方使用該 IDbConnection:

 container.RegisterInstance<IDbConnection>(new SqlConnection(connectionString));

我這里的問題是,如果我在我的班級中使用這樣的 dbconnection,那么工作完成后將如何處理 sql 連接:

public class MyProvider: IMyProvider
{
    private readonly IDbConnection _dbConnection;
    public MyProvider(IDbConnection dbConnection)
    {
        _dbConnection = dbConnection;
    }

    public async Task<IEnumerable<MyData>> GetMyData()
    {
        const string sql = @"SELECT * from mytable";

        return await _dbConnection.QueryAsync<Content>(sql);
    }
}

在設置 DI 掛鈎時,我在啟動時擔心這部分“(new SqlConnection(connectionString))”。 調用數據庫調用后如何以及何時處理 SQLConnection。 在上面的代碼中沒有使用寫任何地方。

調用后Dapper會處理SQLConnection嗎? 如果沒有,那么您能否分享一下如何在進行dapper調用后將上述代碼轉換為配置SQL連接?

它不會被釋放,因為該實例實際上是一個單例,並且在應用程序的整個生命周期內都被保留。 這不是注入數據庫連接的正確方法。

相反,您應該使用RegisterFactory注冊一個工廠方法

container.RegisterFactory<IDbConnection>(f => new SqlConnection(connectionString));

然后您可以使用它來獲取連接並將其放置在using塊中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM