【问题标题】:Linq to SQL in ASP.NET - keep DB connections openASP.NET 中的 Linq to SQL - 保持数据库连接打开
【发布时间】:2012-06-04 21:44:51
【问题描述】:

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

此外,据我所知,DataContext 在初始化时会打开一个连接,并在释放时关闭该连接。

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

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

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

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

【问题讨论】:

  • 您要解决什么问题?并且仅仅因为您使用了锁并不意味着您可以在多个线程上使用相同的连接。

标签: .net linq-to-sql sqlconnection


【解决方案1】:

一般来说,如果您尝试在记录中执行某种循环,并且每次都创建一个 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)

【讨论】:

  • 最重要的是,SQL 连接是池化的,因此它们实际上并没有在物理上打开和关闭。
猜你喜欢
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
相关资源
最近更新 更多