我知道将DataContext保持活动并重新使用它并不是一个好习惯,所以我将它包装在Using语句中。
另外,据我所知,DataContext在初始化时打开一个连接,并在处理时关闭连接。
我在这里要完成的是为每个当前登录的用户保持一个单独的连接(并在用户注销时手动关闭连接)。
多线程不是问题,因为我正在使用锁。
我保留SQLConnections并将它们传递给DataContext构造函数。这种作品。但问题是DataContext在处理时会自动关闭连接。
是否有可能强制DataContext不关闭它使用的连接?
答案 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)