LINQ to SQL和打开连接

时间:2013-05-06 15:31:29

标签: c# asp.net linq-to-sql

我一直在我的数据访问层中使用以下类型的代码设置(组成示例)

public static class LoadData
{
  private static SomeDataContext db = new SomeDataContext();

  public static void LoadData(DropDownList ddl)
  {
    (from ls in db.MyLookup
    select ls).OrderBy(ls=>ls.theId).ToList()
    .ForEach(ls=>ddl.Items.Add(new ListItem(ls.theText, ls.theValue.ToString())));
  }
}

DataContext是否“足够”以便在自身之后进行清理,或者我应该使用using语句包装我的查询以确保连接已关闭?

2 个答案:

答案 0 :(得分:2)

在访问数据库时,至少应该使用using块。数据上下文不会自动为您打开和关闭连接。你仍然要对你的资源负责。

如果您需要使用单个连接(相关数据等)多次访问数据库,您可能需要考虑使用工作单元模式。

答案 1 :(得分:-1)

  

DataContext“智能”是否足以自行清理

数据上下文旨在用于小范围;单笔交易的。因此,在处置它们并允许对象超出范围之前,它们不会释放任何资源。像这样在整个应用程序中使用单个上下文将导致消耗大量资源(包括网络连接以及内存(托管和非托管))。

您应该为每个LoadData调用创建一个新的数据上下文,并将上下文包装在using中,以确保在每次调用后正确处理它。

As noted in comments数据上下文也不是线程安全的,因此这是在多个逻辑事务中不重复使用相同上下文的另一个原因。