我一直在我的数据访问层中使用以下类型的代码设置(组成示例)
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
语句包装我的查询以确保连接已关闭?
答案 0 :(得分:2)
在访问数据库时,至少应该使用using
块。数据上下文不会自动为您打开和关闭连接。你仍然要对你的资源负责。
如果您需要使用单个连接(相关数据等)多次访问数据库,您可能需要考虑使用工作单元模式。
答案 1 :(得分:-1)
DataContext“智能”是否足以自行清理
数据上下文旨在用于小范围;单笔交易的。因此,在处置它们并允许对象超出范围之前,它们不会释放任何资源。像这样在整个应用程序中使用单个上下文将导致消耗大量资源(包括网络连接以及内存(托管和非托管))。
您应该为每个LoadData
调用创建一个新的数据上下文,并将上下文包装在using
中,以确保在每次调用后正确处理它。
As noted in comments数据上下文也不是线程安全的,因此这是在多个逻辑事务中不重复使用相同上下文的另一个原因。