在MVC Controller中配置DbContext,哪种方式"更好"?

ZZZ*_*ZZZ 10 asp.net-mvc entity-framework

在MVC 5中,脚手架代码将具有以下内容:

    public class MyController : Controller
{
    private MyContext db = new MyContext();

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            db.Dispose();
        }
        base.Dispose(disposing);
    }
Run Code Online (Sandbox Code Playgroud)

否则,我需要

using (var db = new MyContext())
{...}
Run Code Online (Sandbox Code Playgroud)

在每个行动中.

代码看起来很好,所以我不需要在每个动作中使用.但是,这是否受程序员的偏爱,或者这种样式在每个需要使用dbcontext的动作中使用时都有一些优势?

rra*_*ski 7

两种解决方案都很好 - 两种解决方案都将配置db上下文.但在我看来,第二个选项会更好 - 你只需要创建数据库上下文.

但是如果另一个类(某些服务类)也使用db上下文呢?优良作法是为整个Web请求设置一个db上下文.在这种情况下,您应该将先前创建的db上下文传递给使用db context的所有类,以防止在所有clases中创建新的db上下文.所以我会考虑使用IoC容器.IoC容器将解析您的依赖关系并且还将管理对象生存期.怒吼

我列出了一些IoC容器:


Kon*_*tov 5

对于简单的情况,根本不需要调用Dispose(或使用Using):)“ DbContext的默认行为是在需要的任何时间自动打开基础连接,而在不再需要时关闭它。” 从这里:http : //blog.jongallant.com/2012/10/do-i-have-to-call-dispose-on-dbcontext/