如何处理在Dapper中使用的连接?

时间:2014-09-18 20:58:28

标签: inversion-of-control structuremap dapper

我正在尝试在服务层上使用Dapper。它应该如何处理IDbConnection?

我在使用StructureMap for IoC的MVC5项目中使用它。

我可以在服务器层类中注入它吗?或者可能是DapperWrapper如下:

public class DapperWrapper {

  private ConnectionString { get { return Settings.ConnectionString; } }

  public IEnumerable<T> Query<T>(String sql, dynamic parameters = null) {

    IEnumerable<T> result;

    using (IDbConnection connection = new SqlConnection(_connection)) {
      connection.Open();
      result = SqlMapper.Query<T>(connection, sql, parameters);        
    }

    return result;

  } // Query

  // OTHER DAPPER METHODS
 }
  1. 我担心这种方法会打开并关闭许多连接。这是一个问题吗?

  2. 我应该在DapperWrapper中注入一个连接,如果是,如何?

  3. 这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:2)

  1. 只要启用了连接池(对于SQL服务器,默认情况下已启用),您不是实际打开和关闭连接 - 您要从/释放到连接池。它应该只需要几微秒。

  2. 这完全是一个设计决定。注射工作。按需建设工程。对于http请求,您还可以经常使用按需(延迟但缓存)以请求为中心的连接存储(只需确保在请求结束时将其丢弃!)。