【发布时间】:2013-06-10 12:54:20
【问题描述】:
我创建了一个电话簿风格的应用程序;在我的电话簿对象上,我有一个本地成员 _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 所指出的,这将导致异常,因为数据上下文在访问对象时已被释放。
我想我要问的是,当我不能使用“使用”语句并且不严格知道上下文何时完成时,如何确保我的数据上下文得到很好的处理。
【问题讨论】:
-
虽然我不能确定,但我认为问题在于
using语句将无法Dispose对象,直到它超出范围 - 这不会发生直到查询被执行。 -
如果我在这里错了,有人纠正我,但是在方法返回的第二个地方,是否会标记任何局部变量以进行处置?我假设上面的两个 sn-ps 基本上是等价的。
-
嗨,我已经编辑了我的问题,因为我没有明确提到第二个会引发异常。
-
你应该让@justanotheruseryoumay知道他们的答案似乎是正确的。
-
他们删除了,不知道怎么联系他们。
标签: c# linq linq-to-sql using-statement