【问题标题】:initializing the entity framework objectcontext on every call在每次调用时初始化实体框架对象上下文
【发布时间】:2011-05-10 18:58:23
【问题描述】:

我有一个使用实体框架作为数据访问层的 Web 应用程序。 现在我在每个请求上初始化从 ObjectContext 继承的实体类。

我只是想知道从性能的角度来看这样做是否有任何缺点或后果。缓存这个对象是不是更好。

请注意,我有很大的 edmx 文件,其中一些包含大约 50 个表

【问题讨论】:

    标签: c# .net entity-framework


    【解决方案1】:

    为每个请求初始化一个 ObjectContext 可能是在 Web 应用程序中实现 EF 的最常用方法。这样做不是性能问题,初始化非常便宜。 ObjectContext 是 EF 对工作单元模式的实现,因此将与数据库的对话封装在单个工作单元中是一种很好的做法。跨请求缓存 ObjectContext 可能会出现问题,因为在 Web 应用程序中不容易处理长时间运行的数据库对话,因为您永远不知道来自给定客户端的下一个请求何时到达。

    【讨论】:

    • 你们都有正确答案,所以我必须标记为第一个答案。
    【解决方案2】:

    这是在 Web 应用程序中处理实体框架时的推荐做法。

    但是,如果您可以将表划分为独立的区域,则可以将包含 50 个表的上下文划分为几个上下文。这样您就可以更轻松地管理上下文了。

    不推荐缓存上下文。 ObjectContext 不是线程安全的。 IT 也会违反工作单元模式。这将导致不需要的行为,例如在单个事务中提交多个用户的更改。

    【讨论】:

      【解决方案3】:

      使用新的context instance per request or action is a must。对此没有性能影响,因为元数据(来自 EDMX)只加载和编译一次(第一次需要它们),然后元数据被同一上下文的所有实例重用,直到应用程序池回收。您甚至可以通过precompiling metadata 加快初始化速度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 2015-02-21
        • 1970-01-01
        • 2016-11-11
        • 2016-06-16
        相关资源
        最近更新 更多