[英]LINQ to SQL and open connections
我一直在数据访问层中进行以下类型的代码设置(组成示例)
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
语句包装查询以确保关闭连接?
您绝对应该至少在访问数据库时使用using
块。 数据上下文不会自动为您打开和关闭连接。 您仍然要对自己的资源负责。
如果您需要使用单个连接(相关数据等)多次访问数据库,则可能需要使用工作单元模式。
DataContext是否“聪明”到足以自行清理
数据上下文被设计为在较小范围内使用。 单笔交易。 因此,除非您处置它们并允许对象超出范围,否则它们不会释放任何资源。 像这样在整个应用程序中使用单个上下文将导致大量资源的消耗(包括网络连接以及内存(托管和非托管))。
您应该为每个LoadData
调用创建一个新的数据上下文,并将该上下文包装在using
以确保在每次调用之后将其正确处理。
如注释中所述,数据上下文也不是线程安全的,因此另一个原因是不要在多个逻辑事务中重用同一上下文。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.