从LINQ select中获取IEnumerable

时间:2013-11-02 00:44:07

标签: c# linq dbcontext

我们从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而垃圾回收器会在此函数中终止dbUsing个结尾处。)< / p>

我们如何在此函数中保留Using并返回所选对象但与db断开连接?

1 个答案:

答案 0 :(得分:3)

什么函数返回IQueryable<T>?您的代码不会返回IQueryable<T>,它会返回null或Category的实例 - .FirstOrDefault()调用的结果。 <{1}}的实例在Category处置后会正常工作。

也许您的问题与延迟加载导航属性有关?这会在DbContext区块之外轰炸。您应该在退出using块之前禁用延迟加载和/或代理生成以避免这种情况或显式加载导航属性/集合