DbContext声明 - 框架4.1 - MVC 3.0

时间:2012-05-10 12:55:54

标签: asp.net-mvc-3 controller entity-framework-4.1 ado.net-entity-data-model dbcontext

在控制器中声明“DBContext”的全局变量然后将其用于所有数据库操作是否正确?

示例:

public class ProductController : Controller
{
    private readonly DBContextEntities _db = new DBContextEntities();

    public ActionResult Index()
    {
     var products = _db.Products.ToList();
     return View(products);
    }

    public ActionResult Create()
    {
     _db.Products.AddObject(new Product{Name="x",Price="5.2"});
     _db.SaveChanges();
     return View(products);
    }

}

请咨询,

1 个答案:

答案 0 :(得分:1)

我试过几次称重。我得出结论,在大多数情况下应该没问题。这就是'为什么'我认为它应该没问题。

所有建议建议尽可能少地保持上下文开放,这是为了避免大量实体被加载并保存在内存中。 这将使您认为应该在每个方法中创建和处理上下文,而不是在类中全局。

由于HTTP请求的持续时间很短,因此全局可用的上下文不应该是主要的开销,每次创建上下文所需的资源将超过在请求期间保持打开的好处。

这个答案来自webforms的观点,如果MVC控制器保持活动的时间超过请求并且需要不同的响应,我不是100%。

我认为关键不是将上下文设置为任何静态的,或者是在应用程序持续时间内生存的内容,因为随着内存中实体数量的增加,这将导致大量内存消耗。 / p>

你可能会争辩说,没有明确地将实现IDisposable的东西放在一个使用块中是个坏主意,我同意这一点。

(免责声明:猜测段落!) 如果页面存在异常或类似情况,我不确定资源是否可能被打开。我认为99.9%的时间你没事,但可能很少有资源没有正确处理