Dapper暗中期望连接在使用时打开。为什么不自己打开和关闭它?这不是简单的连接管理吗?
我问,因为一个同事和我一直在寻找有关连接池的幕后情况的性质,以及如何在多个命令之间保持连接打开,或打开和关闭它有任何好处对于每个命令。
Dapper现在(并且相当长一段时间)在内部处理这个问题。它只是工作•
原创(过时)答案:
你没错。我没有注意到这种不便的原因是由于遗留原因(特别是:我们以前只使用LINQ-to-SQL)我们的主要连接类似于DataContext
- 因此我们将dapper方法重新公开为扩展方法在DataContext
。
愚蠢的是:这些方法的作用是:
using(db.Connection.EnsureOpen()) {
db.Connection.{the dapper method}
}
这里的EnsureOpen是一种厚颜无耻的方法:
所以:我们显然感觉到了你的痛苦,但我们进一步实现了它。
请将此作为功能请求记录。我们拥有所有代码(虽然我需要稍微调整一下以适应非缓冲数据的“读者”) - 绝对没有理由让dapper无法获得所有权。
我必须在这里添加一个相反的答案,或者至少建议Dapper可以以不同的方式处理连接,如果仅在某些情况下。我刚刚反映了Dapper.SqlMapper,并且ExecuteCommand方法中有一些检查(由Execute调用(在公共api上))以检查连接是否已关闭然后打开它,如果不是。
我遇到这个问题时,我的同事强调,在通过dapper调用数据库之前,我没有明确地调用connection.open。由于我的集成测试都是绿色的,因此在运行时所有内容都很糟糕,因此没有找到。所以我们潜入了Dapper代码。有人可能认为打开明确表示更好,但反过来说有些人可能认为代码越少越好。