首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Dapper的IDbConnection工厂

使用Dapper的IDbConnection工厂
EN

Stack Overflow用户
提问于 2012-12-26 06:41:09
回答 1查看 5.4K关注 0票数 3

我在我的ASP.NET WebForms解决方案中使用了dapper。

我的所有处理数据的类都从这个基类检索一个打开的连接

代码语言:javascript
复制
public abstract class SalesDb : IDisposable
{
    protected static IDbConnection OpenConnection()
    {
        IDbConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SalesDb"].ConnectionString);
        connection.Open();
        return connection;
    }

    public void Dispose()
    {
        OpenConnection().Dispose();
    }
}

使用此基类的服务类示例

代码语言:javascript
复制
public class LeadService : SalesDb
{
    public IEnumerable<LeadDto> Select()
    {
        using (IDbConnection connection = OpenConnection())
        {
            return connection.Query<LeadDto>("Lead_Select",
                null, null, true, null, CommandType.StoredProcedure);
        }
    }
}

基类中的OpenConnection()方法是静态的,并且每次调用都返回一个新的实例,这有什么缺点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-26 07:20:30

您要在dispose中创建新连接吗?那行不通的!使用超过100次迭代的简单循环(最大池大小默认为100 ),您可能会看到某种类型的异常(太多打开的连接,等)。

在任何情况下,我都预计会出现严重的性能问题,因为池需要连续创建新的物理连接。

我不会重新发明。我的建议是:不要使用那个类,尤其是在asp.net中。

Don't poach on the Connection-Pool's territory ;-)

但是注意到你的两个问题都可以用No来回答。静态方法不是问题(与静态连接不同),也不是说它总是返回新连接(因为池将返回当前未使用的连接)。但是您的类的主要问题是创建连接并打开它们的dispose

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14034497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档