为什么Linq2Sql为每个存储过程调用创建一个新连接并保持其打开状态

本文关键字:连接 状态 新连接 调用 存储过程 创建 Linq2Sql 一个 为什么 | 更新日期: 2023-09-27 18:29:00

以前没有发生过这种情况,所以我假设是我所做的事情导致了这种情况,但我看不出可能是什么。

我已经针对sql server 2005数据库设置了linq2sql。我只使用存储过程。

我的大多数过程都运行良好,但这个特定的更新过程有时会连续触发几百次(克隆头记录的详细信息)。

这导致了超时,运行脚本查看打开的连接会显示我的应用程序连接都在休眠并占用空间。

有什么想法和建议吗?

我的数据上下文设置为服务类中的静态变量:

private static WarehouseSystemDataContext dc
{
    get
    {
        // It is being passed a closed SqlConnection object
        WarehouseSystemDataContext _dc = 
            new WarehouseSystemDataContext(Constants.getWarehouseSystemConn());
        _dc.ObjectTrackingEnabled = false;
        _dc.CommandTimeout = 600;
        return _dc;
    }
}

为什么Linq2Sql为每个存储过程调用创建一个新连接并保持其打开状态

每次引用数据上下文时,您都会创建一个新的连接

private static WarehouseSystemDataContext _dc
private static WarehouseSystemDataContext dc
{
    get
    {
        if(_dc == null)
        {
        // It is being passed a closed SqlConnection object
        _dc = new WarehouseSystemDataContext(Constants.getWarehouseSystemConn());
        _dc.ObjectTrackingEnabled = false;
        _dc.CommandTimeout = 600;
        }
        return _dc;
    }
}