C# 处理实体框架上下文

C# 处理实体框架上下文,c#,entity-framework,ef-code-first,asp.net-mvc-5,C#,Entity Framework,Ef Code First,Asp.net Mvc 5,在新的MVC-5模板中,在App_Start文件夹中有一个名为Startup.Auth.cs的文件,其中包含以下行(以及一些其他数据): 并将此声明作为字段放置在控制器类中: public class HomeController : Controller { private ApplicationDbContext context = new ApplicationDbContext(); 是否有处理上下文的首选方法?是一个单例类提供首选的上下文吗?这只是一种方便的方法,可以在调用某

在新的
MVC-5
模板中,在
App_Start
文件夹中有一个名为
Startup.Auth.cs
的文件,其中包含以下行(以及一些其他数据):

并将此声明作为字段放置在
控制器类中

public class HomeController : Controller
{
    private ApplicationDbContext context = new ApplicationDbContext();

是否有处理
上下文的首选方法?是一个
单例类
提供首选的
上下文
吗?

这只是一种方便的方法,可以在调用某个操作方法时创建上下文对象。您希望每个请求都有一个实例,因为您希望所有对象都附加到同一个上下文实例。您还希望上下文的生存期是请求生存期

如果要使用第二种方法
private ApplicationDbContext context=new ApplicationDbContext()您必须将其放入每个控制器中。您可以创建某种基本控制器,它执行相同的操作,并且只从基本控制器继承


同样,这只是一种用于演示的方便方法。

因此,放置
私有ApplicationDbContext context=newapplicationdbcontext()将在每个请求上创建一个实例?服务器响应后是否会释放该实例?不,您应该在控制器上编写dispose方法来释放上下文。这是另一种技术的另一个方便之处。在从操作返回之前,我不需要手动处理上下文吗?控制器已经实现了IDisposable。您所需要做的就是用自己的实现覆盖它并调用基本方法我不需要显式地处理它?
var context = HttpContext.GetOwinContext().Get<ApplicationDbContext>();
public class HomeController : Controller
{
    private ApplicationDbContext context = new ApplicationDbContext();