【发布时间】:2015-02-19 23:30:17
【问题描述】:
如果您在 Visual Studio 2013 中创建 WebAPI/MVC 项目,请添加模型(和 DbContext 类),以及此处概述的该模型的控制器 -
http://www.asp.net/web-api/overview/data/using-web-api-with-entity-framework/part-2,
它创建了一个控制器,将 DbContext 声明为成员变量,根据许多 stackoverflow 答案/在线文章,这是一个坏主意 - 就像这个
https://stackoverflow.com/a/10588594
Visual Studio 生成的控制器方法-
// GET: api/Authors
public IQueryable<Author> GetAuthors()
{
return db.Authors;
}
如果您使用推荐的每个请求生命周期将无法工作 -
// GET: api/Authors
public IQueryable<Author> GetAuthors()
{
DbSet<Author> authors = null;
using(MyContext db = new MyContext) {
authors = db.Authors;
}
return authors;
}
因为在迭代结果时上下文超出了范围,并且您得到了一个对象处理异常。
那么,正确的方法是什么,如果是“使用” per request 方法,为什么 VS 模板使用成员变量方法?
【问题讨论】:
标签: asp.net-mvc entity-framework asp.net-web-api