asp.net-mvc - 在MVC Controller 中处置DbContext,哪种方式 "better"?

标签 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);
    }

否则,我需要

using (var db = new MyContext())
{...}

在每个 Action 中。

代码看起来不错,所以我不需要在每个操作中使用 using 。但是,这是否受程序员的偏好影响,或者这种风格比在每个需要使用 dbcontext 的操作中使用有一些优势?

最佳答案

两种解决方案都很好 - 两种解决方案都会处理数据库上下文。但在我看来,第二个选项会更好 - 您在需要的地方创建数据库上下文。

但是如果另一个类(某些服务类)也使用数据库上下文怎么办?为整个 Web 请求使用一个数据库上下文是一种很好的做法。在这种情况下,您应该将先前创建的数据库上下文传递给使用数据库上下文的所有类,以防止在所有类中创建新的数据库上下文。所以我会考虑使用IoC容器。 IoC 容器将解决您的依赖关系,还将管理对象的生命周期。波纹管

我列出了一些 IoC 容器:

关于asp.net-mvc - 在MVC Controller 中处置DbContext,哪种方式 "better"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26708517/

相关文章:

c# - 变量用动态值初始化一次

asp.net-mvc - PartialView 是否应该使用指定的布局?

asp.net-mvc - .Net 成员(member)服务提供商没有发现重复的电子邮件

c# - 如何使用ModelState.IsValid通过条件在单个 View 中验证多个ViewModel

c# - 在 Entity Framework 拦截器中向 DbScanExpression 添加内部连接

asp.net-mvc - MiniProfiler MVC DBContext - 无法确定提供者名称

c# - 使用 Mysql 和 EF6 生成 View 时出错

c# - 多个相同类型的 Include 语句出现奇怪的 Entity Framework 错误

c# - 如何首先使用带有 EF 代码的可重用查询/表达式来获取子实体作为父级中的 DTO?

jquery - 尝试使用 VB.Net 返回 asp.net mvc JSONResult