我们从DB上下文中选择LINQ,如下所示:
public Category GetCategory(int categoryId)
{
Category result = null;
using (var db = new MyContext())
{
result = (from entry in db.Categories
where entry.CategoryId == categoryId
select entry).FirstOrDefault();
}
return result;
}
我们担心这会不时有效,因为函数会返回IQueryable
而垃圾回收器会在此函数中终止db
(Using
个结尾处。)< / p>
我们如何在此函数中保留Using
并返回所选对象但与db
断开连接?
答案 0 :(得分:3)
什么函数返回IQueryable<T>
?您的代码不会返回IQueryable<T>
,它会返回null或Category
的实例 - .FirstOrDefault()
调用的结果。 <{1}}的实例在Category
处置后会正常工作。
也许您的问题与延迟加载导航属性有关?这会在DbContext
区块之外轰炸。您应该在退出using
块之前禁用延迟加载和/或代理生成以避免这种情况或显式加载导航属性/集合