为什么不小巧玲珑点网打开和关闭连接本身?(Why doesn't Dapper dot ne

2019-06-18 08:20发布

小巧玲珑的隐含预期的连接是开放的,当它使用它。 为什么它不打开和关闭它本身? 这是不是简单地连接管理?

我问,因为一个同事和我一直在来回上发生的事情与连接池幕后的本质,如果有保持连接开放在多个命令,或打开和关闭任何好处每个命令。

Answer 1:

现在小巧玲珑的(和相当长的一段时间)这涉及内部。 这只是工作™


原件(过时)答案:

你没有错。 我没有注意到这种不便的原因是由于遗留原因(具体是:我们习惯使用LINQ到SQL独家)我们的主连接样东西是一个DataContext -所以我们重新暴露短小精悍的方法为扩展方法在DataContext

傻的事情是:什么这些方法做的是:

using(db.Connection.EnsureOpen()) {
    db.Connection.{the dapper method}
}

这里EnsureOpen是一个厚脸皮的方法:

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

所以:我们明显感觉到正是你的痛苦,但我们实现了它的层进一步上涨。

请登录这是一个功能请求。 我们所有的代码(虽然我需要稍微调整它以适应非缓冲数据的“读者”) -还有绝对没有理由认为短小精悍不能采取的所有权。



Answer 2:

我要在这里补充一个相反的答案,或者至少表明,小巧玲珑可以处理不同的连接,如果只在某些情况下。 我刚才在反映和Dapper.SqlMapper中有ExecuteCommand方法检查(叫了通过(在公共API)执行)来检查,如果连接被关闭,然后打开它,如果它不是。

我遇到这是我的同事代码审查强调,我没有明确通过短小精悍的数据库调用之前调用connection.open。 这是不是捡到我的集成测试都是绿色的,一切都在运行时没说。 因此,我们一头扎进小巧玲珑的代码。 这可以说其更好地调用open明确性,但反过来有些人可能认为,更少的代码就更好了。



Answer 3:

我相信小巧玲珑不管理您的连接,因为它是它的职责之外的ORM映射器。 小巧玲珑不知道你是否会在以后重复使用相同的连接 - 这就是为什么它接受作为参数之一的连接。 这同样适用于交易 - 这是应该对其进行管理,而不是ORM映射器的应用程序。

这是微不足道的编写管理连接自己的扩展方法。



文章来源: Why doesn't Dapper dot net open and close the connection itself?