小巧玲珑的隐含预期的连接是开放的,当它使用它。 为什么它不打开和关闭它本身? 这是不是简单地连接管理?
我问,因为一个同事和我一直在来回上发生的事情与连接池幕后的本质,如果有保持连接开放在多个命令,或打开和关闭任何好处每个命令。
小巧玲珑的隐含预期的连接是开放的,当它使用它。 为什么它不打开和关闭它本身? 这是不是简单地连接管理?
我问,因为一个同事和我一直在来回上发生的事情与连接池幕后的本质,如果有保持连接开放在多个命令,或打开和关闭任何好处每个命令。
现在小巧玲珑的(和相当长的一段时间)这涉及内部。 这只是工作™
原件(过时)答案:
你没有错。 我没有注意到这种不便的原因是由于遗留原因(具体是:我们习惯使用LINQ到SQL独家)我们的主连接样东西是一个DataContext
-所以我们重新暴露短小精悍的方法为扩展方法在DataContext
。
傻的事情是:什么这些方法做的是:
using(db.Connection.EnsureOpen()) {
db.Connection.{the dapper method}
}
这里EnsureOpen是一个厚脸皮的方法:
所以:我们明显感觉到正是你的痛苦,但我们实现了它的层进一步上涨。
请登录这是一个功能请求。 我们所有的代码(虽然我需要稍微调整它以适应非缓冲数据的“读者”) -还有绝对没有理由认为短小精悍不能采取的所有权。
我要在这里补充一个相反的答案,或者至少表明,小巧玲珑可以处理不同的连接,如果只在某些情况下。 我刚才在反映和Dapper.SqlMapper中有ExecuteCommand方法检查(叫了通过(在公共API)执行)来检查,如果连接被关闭,然后打开它,如果它不是。
我遇到这是我的同事代码审查强调,我没有明确通过短小精悍的数据库调用之前调用connection.open。 这是不是捡到我的集成测试都是绿色的,一切都在运行时没说。 因此,我们一头扎进小巧玲珑的代码。 这可以说其更好地调用open明确性,但反过来有些人可能认为,更少的代码就更好了。
我相信小巧玲珑不管理您的连接,因为它是它的职责之外的ORM映射器。 小巧玲珑不知道你是否会在以后重复使用相同的连接 - 这就是为什么它接受作为参数之一的连接。 这同样适用于交易 - 这是应该对其进行管理,而不是ORM映射器的应用程序。
这是微不足道的编写管理连接自己的扩展方法。