为MVC控制器声明DbContext

Tho*_*eil 3 asp.net-mvc dbcontext

在线查看一些MVC示例,我看到通常在控制器中DbContext变量被声明为私有成员变量(即全局)并且可以被所有方法访问.

但是,我最近遇到了一篇关于ASP.NET身份的文章,并且在控制器中注意到,DbContext是在每个方法中声明的(需要它).

这种方法有安全上的好处吗?或许限制安全对象的生命周期以获得更好的整体安全性?!?!

如果没有,那么我看到第一种方法更有效,其中数据库上下文在控制器加载时被实例化.

以下是我能找到的关于DbContext的全部内容,但没有什么可以真正回答我的问题.

DbContext声明 - 框架4.1 - MVC 3.0

MVC,DbContext和多线程

lc.*_*lc. 5

在每个请求上,构造一个新的控制器实例.因此,对于所有意图和目的,dbcontext是否在构造函数中实例化而在任何给定方法中封装并不重要.

除了样式选择之外,在给定方法中声明和包含dbcontext的原因是:

  • 不需要它的方法不会实例化上下文,从而消除了开销(如果有的话).这也可以使用延迟初始化模式来完成.
  • 一旦方法完成,就立即处理上下文,而不是在请求结束时.一般来说,这不应该是一个问题; 通常,如果用户等待的时间超过几秒钟,则会出现更大的问题.
  • 不同的方法使用不同的上下文.

其中一些原因是声明单个上下文并将其实例化一次:

  • 您只有一个实例化上下文的地方而不是很多.在典型的应用程序中,大多数页面无论如何都需要来自数据库的一些信息.
  • 调用其他方法的方法不会分别持有自己的上下文对象实例.
  • 您可以创建一个基本控制器类,默认情况下会创建一个dbcontext对象,允许您在所有继承的控制器中进行DRY.