gpt4 book ai didi

c# - 使用 Dapper 的 IDbConnection 工厂

转载 作者:行者123 更新时间:2023-11-30 14:13:31 24 4
gpt4 key购买 nike

我在我的 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();
}
}

使用该基类的服务类示例

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() 方法是静态的,每次调用都返回一个新实例,有什么缺点吗?

最佳答案

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

无论如何,我预计会出现严重的性能问题,因为池需要连续创建新的物理连接。

我不会重新发明 Connection-Pool .我的建议是:不要使用那个类,在 asp.net 中更是如此。

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

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

关于c# - 使用 Dapper 的 IDbConnection 工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14034497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com