为什么Dapper dot net不打开并关闭连接本身?

smd*_*ger 23 .net connection-pooling sqlconnection dapper

Dapper隐含地期望连接在使用时打开.为什么不自己打开和关闭它?这不是简单的连接管理吗?

我问,因为我和同事一直在寻找有关连接池的幕后故事的性质,以及如何在多个命令之间保持连接打开,或打开和关闭它有任何好处对于每个命令.

Mar*_*ell 33

Dapper现在(并且相当长一段时间)在内部处理这个问题.它只是工作™


原创(过时)答案:

你没错.我没有注意到这种不便的原因是由于遗留原因(特别是:我们以前只使用LINQ-to-SQL)我们的主要连接类似于DataContext- 所以我们重新公开dapper方法作为扩展方法DataContext.

愚蠢的是:这些方法的作用是:

using(db.Connection.EnsureOpen()) {
    db.Connection.{the dapper method}
}
Run Code Online (Sandbox Code Playgroud)

这里的EnsureOpen是一种厚颜无耻的方法:

  • 如果连接打开,则返回null
  • 否则,它会打开连接,并返回一个IDisposable令牌,在完成后关闭连接

所以:我们显然感觉到你的痛苦,但我们进一步实现了它.

请将此作为功能请求记录.我们拥有所有代码(虽然我需要稍微调整一下以适应非缓冲数据的"读者") - 绝对没有理由认为dapper不能拥有这个.

  • @Michael好,技术上开/关不同于处置.如果您只打算在个别电话周围打开/关闭,那么您也可以让精打细算.如果您以更大的粒度打开/关闭(例如,根据请求),那么代码执行此操作并将打开的连接传递给dapper会更好. (4认同)
  • @MarcGravell感谢您的确认!您是否建议我们从代码中手动打开/关闭连接(使用“ using”块)?或者,如果让Dapper照顾连接寿命以便从连接池中获得好处,会更好吗?谢谢! (2认同)