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