代码之家  ›  专栏  ›  技术社区  ›  Buu

在ASP.NET MVC中管理ADO.NET实体框架ObjectContext

  •  9
  • Buu  · 技术社区  · 15 年前

    我正在MVC应用程序中使用ADO.NET EF。我正在考虑将ObjectContext放在HttpContext.Current中,以便同一请求中的所有逻辑都可以访问它,而无需每次打开/销毁。但是,我确信这是否是管理ObjectContext实例的好方法。关于这一需求,我有两个问题:

    1. 由于HttpContext.Current属性由线程本地字段支持,并且ASP.NET使用池中的线程来处理请求,因此请求放入HttpContext.Current的ObjectContext实例是否可能对池中同一线程上运行的后续请求可见?

    2. 您认为应该如何在ASP.NET MVC中管理ObjectContext,以避免大量打开/处理并防止争用情况?

    5 回复  |  直到 15 年前
        1
  •  5
  •   Craig Stuntz    15 年前

    使用 Repository pattern . Override Controller.Dispose以处置存储库,存储库反过来处置DataContext。

        2
  •  2
  •   Todd Smith Brandon    15 年前

        3
  •  2
  •   Andrew Peters    15 年前

    每个请求使用一个ObjectContext是个好主意。

    如前所述,一些IoC框架支持这种OTB——通常称为PerRequest范围/生命周期。

        4
  •  1
  •   gius    15 年前

    Ad 2,我记得,在Linq to SQL中,DataContext对象被认为是一个轻量级对象,所以经常创建它应该不是一个问题。希望EF也是如此。

        5
  •  0
  •   Buu    15 年前

    谢谢国际奥委会的建议。我使用Unity并通过HttpContext.Current实现了每个请求的生命周期管理器来存储/检索对象。看起来很好用。