Dapper.NET连接/查询最佳实践

问题描述 投票:10回答:2

因此,我已经阅读了一堆链接/ SO问题,但是我仍然无法获得明确的答案。

[在ASP.NET应用程序中使用Dapper执行SQL查询时,打开/关闭连接的最佳实践是什么?

这是我当前遵循的模式:

using (var db = new SqlConnection(_connectionString))
{
    return db.Query("dbo.SomeQuery");
}

基本上,每次根据需要打开/关闭一个SQL连接。

根据我的理解,以上代码应自动打开/关闭SQL连接(例如,我不需要显式执行db.Opendb.Close)。

我看到的问题是一段时间后,我收到了很多这样的错误:

InvalidOperationExceptionTimeout已过期。超时时间已过从池中获取连接之前。这可能发生了因为所有池化连接都在使用中,最大池大小为到达。

在此期间,我进行了SQL事件探查器跟踪,并且没有看到任何长查询会阻塞任何内容,因此,好像我的ASP.NET Web应用程序用尽了连接(而不是将太久而无法执行查询)。

有人可以告诉我我在做什么错吗?

旁注:我的应用程序作为Azure Web App运行,因此很遗憾,我无法真正看到该Web应用程序正在打开多少连接。 :(

c# asp.net .net sql-server dapper
2个回答
0
投票

根据我的观点,使用语句来关闭您的连接,但您明确地告诉您打开这样的连接:

using (var db = new SqlConnection(_connectionString))

{
       db.open();

    return db.Query("dbo.SomeQuery");
}

0
投票

使用块将处理资源管理,因此您不需要手动关闭连接,除了手动关闭连接还会阻止连接池并降低性能。

© www.soinside.com 2019 - 2024. All rights reserved.