[英]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.