ASP.NET中的Linq to SQL - 保持数据库连接打开

时间:2012-06-04 21:44:51

标签: .net linq-to-sql sqlconnection

我知道将DataContext保持活动并重新使用它并不是一个好习惯,所以我将它包装在Using语句中。

另外,据我所知,DataContext在初始化时打开一个连接,并在处理时关闭连接。

我在这里要完成的是为每个当前登录的用户保持一个单独的连接(并在用户注销时手动关闭连接)。

多线程不是问题,因为我正在使用锁。

我保留SQLConnections并将它们传递给DataContext构造函数。这种作品。但问题是DataContext在处理时会自动关闭连接。

是否有可能强制DataContext不关闭它使用的连接?

1 个答案:

答案 0 :(得分:2)

通常,如果您尝试执行某种循环记录,并且每次都创建DataContext(以及扩展名为SQL连接),则会出现您的痛点。只要你不这样做,就不应该有任何重大的性能问题。

在我看来,保持SQL连接打开以便将其传递给DataContext的概念是不成熟的优化。 SQL连接 非常昂贵,DataContext对象也不是。

通常,DataContext对象的生命周期应与关联的Repository对象的生命周期相同。

示例

public class CustomerRepository
{
    private MyDatabaseDataContext dataContext;

    public CustomerRepository()
    {
        dataContext = new MyDatabaseDataContext();
    }

    public Customer GetCustomer(int id)
    {
        return dataContext.Customers.FirstOrDefault(x => x.id == id);
    }

    public IQueryable<Customer> CustomersByRep(int repID)
    {
        return dataContext.Customers.Where(x => x.repID == repID);
    }
}

另见
ASP.NET MVC Tip #34 – Dispose of Your DataContext (or Don’t)