我创建了一个电话簿风格的应用程序;在我的电话簿对象上,我有一个_site
用作过滤器的本地成员,因为大约有 1000 个电话号码,分布在我组织内的 12 个站点中。使用此方法一次只能检索一个站点。
这是我原来的方法。GUI 有几种重新排序数据的方法,因此我将其保留为 IQueryable,因为我想推迟 SQL 以允许在 SQL 服务器而不是客户端 PC 上完成过滤。
作品
public IQueryable<PhoneNumber> GetPhoneDirectory()
{
PhoneBookDataContext db = new PhoneBookDataContext())
return db.PhoneNumbers.Where(d => d.Site == _site);
}
但是,我也试图在using
陈述方面保持“最佳实践”。
不工作
public IQueryable<PhoneNumber> GetPhoneDirectory()
{
using (PhoneBookDataContext db = new PhoneBookDataContext())
{
return db.PhoneNumbers.Where(d => d.Site == _site);
}
}
现在正如@justanotheruseryoumay 所指出的,这将导致异常,因为数据上下文在访问对象时已被释放。
我想我要问的是,当我不能使用“使用”语句并且不严格知道上下文何时完成时,如何确保我的数据上下文得到很好的处理。