【发布时间】:2011-04-12 15:03:48
【问题描述】:
我一直在使用“使用”块进行编码,但我想知道是否可以从以下返回 IQueryable,而无需在访问之前处理对象。
public IQueryable<Contact> GetContacts(string clientID)
{
using (dbDataContext db = new dbDataContext())
{
var contacts = from _contacts in db.Contacts
where _contacts.ClientID == clientID
orderby _contacts.LastName ascending
select _contacts;
return contacts;
}
}
我是简单地删除“使用”块并让 .Net 管理对象,还是让 Linq 提前运行查询并返回填充的对象。
【问题讨论】:
-
请注意,没有必要明确地处理数据上下文。无论如何,这是个好问题。
-
@fearofawhackplanet - 嗯,是的。 IMO 应假定任何一次性物品要求处置,并应妥善处理。它可以保持一个开放的连接,例如...
-
@Marc:我只是继续我在几个博客上阅读的内容,以及 ScottGu 和 Linq 团队的几乎所有示例。据我所知,微软的官方立场是,如果它能让你感觉更好,你可以处理,但这真的没有必要。请参阅 leedumond.com/blog/about-disposing-the-datacontext 作为示例,了解有关 dispose 和此问题中描述的延迟执行问题的一些讨论。
-
Scott Guthrie: "Datacontext 对象实际上并没有打开任何与数据库的连接——因此您不必显式处理它。相反,它从连接池仅在需要时才返回,完成后立即返回。” 没有比这更高的权限了。
-
对于任何寻找的人,这里是@fearofawhackplanet 发布的文章的更新链接:web.archive.org/web/20130702164240/http://leedumond.com/blog/…
标签: c# .net linq-to-sql