IDbConnection工厂使用Dapper

Nil*_*ers 3 c# asp.net dapper

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

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

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

使用此基类的服务类的示例

public class LeadService : SalesDb
{
    public IEnumerable<LeadDto> Select()
    {
        using (IDbConnection connection = OpenConnection())
        {
            return connection.Query<LeadDto>("Lead_Select",
                null, null, true, null, CommandType.StoredProcedure);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有任何缺点:)OpenConnection(基类中的方法是静态的,并为每个调用返回一个新实例?

Tim*_*ter 7

您正在处置中创建新连接?那不行!使用一个超过100次迭代的简单循环(默认最大池大小为100),您可能会看到某种异常(开放连接太多,ExecuteReader需要打开和可用的连接等).

在任何情况下,我都会遇到严重的性能问题,因为池需要连续创建新的物理连接.

我不会重新发明连接池.我的建议是:不要在asp.net中使用该类.

不要在Connection-Pool的领土上偷猎 ;-)

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