的DbContext声明 - 框架4.1 - 3.0 MVC(DbContext declara

2019-10-31 16:46发布

它是正确的控制器申报“的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);
    }

}

请指教,

Answer 1:

我试图权衡这件事几次。 我得出的结论是,应在大部分情况下是好的。 这是“为什么”,我认为它应该没问题。

所有的意见建议保持开放的背景下,因为没有时间成为可能,这是为了避免被加载并保持在内存吨实体。 这将导致你认为上下文应创建和设置在每一个方法,而不是在全球范围内的一类。

由于HTTP请求的持续时间是小,具有全局可用的情况下不应该是一个大的开销,以创建上下文每次将超过保持其开放的请求期间的好处所需要的资源。

这个答案是从web表单的角度来看,我不是100%,如果一个MVC控制器将超过请求再保持活力,需要不同的反应,我害怕。

我认为关键是没有设置上下文任何静态,或者说其目的是活的应用程序的时间,因为这将引领你进入海量内存消耗的实体内存数量的增长。

你可以说,没有明确地把一些东西,实现IDisposable using块里面是一个坏主意,我会同意。

(免责声明:猜测款!)这是我不能确定的资源的可能性保持开放,如果页面吸盘异常或类似。 我认为99.9%的时间你会被罚款,但是当资源没有正确地放置的有可能是罕见的情况下,



文章来源: DbContext declaration - Framework 4.1 - MVC 3.0