2

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

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语句包装我的查询以确保连接已关闭?

4

2 回答 2

2

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

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

于 2013-05-06T15:32:57.970 回答
-1

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

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

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

正如评论中所指出的,数据上下文也不是线程安全的,因此这是不在多个逻辑事务中重用相同上下文的另一个原因。

于 2013-05-06T15:35:07.507 回答