繁体   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