为什么没有使用LINQ To SQL和"using"语句的Web API Controller工作?

Mar*_*gan 3 c# asp.net-mvc asp.net-web-api

我喜欢在using语句中包含我的数据访问,以使自己对垃圾收集感觉良好.我正在运行Visual Studio 2013 Preview并以.NET 4.5为目标.我有一个叫做WordsController的ApiController:

public class WordsController : ApiController
{
    // GET api/<controller>
    public IEnumerable<Keyword> Get()
    {
        using (TestDataContext dc = new TestDataContext())
        {
            return dc.Keywords;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,告诉我在访问数据之前已经处理了datacontext.

将代码更改为此工作原理:

public class WordsController : ApiController
{
    // GET api/<controller>
    public IEnumerable<Keyword> Get()
    {
        TestDataContext dc = new TestDataContext();

        return dc.Keywords;
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么不在usingDataContext 时才能工作?

Ada*_*Dev 9

return dc.Keywords

实际上并没有在那里执行查询/实现结果,所以当实际枚举结果时(因此它尝试运行查询),上下文已经被处理掉了.

而是尝试:

using (TestDataContext dc = new TestDataContext())
        {
            return dc.Keywords.ToArray(); // execute the query and materialise NOW
        }
Run Code Online (Sandbox Code Playgroud)

只是在这里添加适当的术语和参考:延期执行