【发布时间】:2011-05-10 18:58:23
【问题描述】:
我有一个使用实体框架作为数据访问层的 Web 应用程序。 现在我在每个请求上初始化从 ObjectContext 继承的实体类。
我只是想知道从性能的角度来看这样做是否有任何缺点或后果。缓存这个对象是不是更好。
请注意,我有很大的 edmx 文件,其中一些包含大约 50 个表
【问题讨论】:
标签: c# .net entity-framework
我有一个使用实体框架作为数据访问层的 Web 应用程序。 现在我在每个请求上初始化从 ObjectContext 继承的实体类。
我只是想知道从性能的角度来看这样做是否有任何缺点或后果。缓存这个对象是不是更好。
请注意,我有很大的 edmx 文件,其中一些包含大约 50 个表
【问题讨论】:
标签: c# .net entity-framework
为每个请求初始化一个 ObjectContext 可能是在 Web 应用程序中实现 EF 的最常用方法。这样做不是性能问题,初始化非常便宜。 ObjectContext 是 EF 对工作单元模式的实现,因此将与数据库的对话封装在单个工作单元中是一种很好的做法。跨请求缓存 ObjectContext 可能会出现问题,因为在 Web 应用程序中不容易处理长时间运行的数据库对话,因为您永远不知道来自给定客户端的下一个请求何时到达。
【讨论】:
这是在 Web 应用程序中处理实体框架时的推荐做法。
但是,如果您可以将表划分为独立的区域,则可以将包含 50 个表的上下文划分为几个上下文。这样您就可以更轻松地管理上下文了。
不推荐缓存上下文。 ObjectContext 不是线程安全的。 IT 也会违反工作单元模式。这将导致不需要的行为,例如在单个事务中提交多个用户的更改。
【讨论】:
使用新的context instance per request or action is a must。对此没有性能影响,因为元数据(来自 EDMX)只加载和编译一次(第一次需要它们),然后元数据被同一上下文的所有实例重用,直到应用程序池回收。您甚至可以通过precompiling metadata 加快初始化速度。
【讨论】: