在每次调用时初始化实体框架对象上下文
本文关键字:实体 框架 对象 上下文 初始化 调用 | 更新日期: 2023-09-27 17:55:41
我有一个使用实体框架作为数据访问层的 Web 应用程序。现在,我正在初始化在每个请求上从 ObjectContext 继承的实体类。
我只想知道从性能的角度来看,这样做是否有任何缺点或后果。缓存此对象是否更好。
请注意,我有大的 edmx 文件,有些包含大约 50 个表
每个请求初始化 ObjectContext 可能是在 Web 应用程序中实现 EF 的最常见方法。这样做不是性能问题,初始化非常便宜。ObjectContext 是 EF 对工作单元模式的实现,因此最好将与数据库的对话封装在单个工作单元中。跨请求缓存 ObjectContext 可能会有问题,因为长时间运行的数据库对话在 Web 应用程序中不容易处理,因为您永远不知道来自给定客户端的下一个请求何时到达。
在 Web 应用程序中处理实体框架时,建议这样做。
但是,如果可以将包含 50 个表的上下文分区为几个上下文,则可以将表划分为多个上下文。然后,您将更容易管理上下文。
不建议缓存上下文。ObjectContext 不是线程安全的。IT 也会违反工作单元模式。这将导致不需要的行为,例如在单个事务中提交多个用户的更改。
必须为每个请求或操作使用新的上下文实例。对此没有性能影响,因为元数据(来自 EDMX)仅加载和编译一次(第一次需要它们),之后元数据将重用于同一上下文的所有实例,直到应用程序池回收。您甚至可以通过预编译元数据来加快初始化速度。