我一直在编写'使用'块,但我想知道如果我可以返回一个IQueryable从以下没有对象被处置之前我访问它。当dbContext带有'using'块时,如何从Linq返回一个IQueryable到SQL查询?
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;
}
}
难道我简单地去掉“使用”块,让净管理的对象,或者我可以得到LINQ到早期运行查询并返回填充对象。
请注意,显式处理datacontext并不是必须的。无论如何,这是个好问题。 – fearofawhackplanet 2010-09-15 10:59:44
@fearofawhackplanet - 呃,是的。任何一次性物品都应被假定为**要求**处置,并且应该适当处理IMO。它可以保持一个开放的连接,例如... – 2010-09-15 11:12:31
@Marc:我只是继续我在几个博客上阅读的内容,还有几乎所有ScottGu和Linq团队的例子。据我所知,官方微软的立场是,如果它让你感觉更好,你可以处置,但它确实不是必需的。请参阅http://leedumond.com/blog/about-disposing-the-datacontext/,以此作为关于此问题中描述的处置和防御执行问题的一些讨论的示例。 – fearofawhackplanet 2010-09-15 11:38:09