每次调用时初始化Entity Framework ObjectContext

7

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

我想知道从性能角度来看这样做是否有任何缺点或后果。是将此对象缓存更好呢?

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

3个回答

4

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


你们都回答得很正确,所以我必须将第一个标记为答案。 - Ghyath Serhal

2

在Web应用程序中处理Entity Framework时,这是推荐的做法。

然而,如果您可以将您的50个表分成独立的区域,那么您可以将包含它们的上下文分成几个上下文。这样,您就可以更轻松地管理这些上下文。

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


2
每个请求或操作必须使用新的上下文实例。这不会对性能产生影响,因为元数据(来自EDMX)仅在加载和编译一次(在首次需要它们时)之后,元数据将用于同一上下文的所有实例,直到应用程序池重新启动。您甚至可以通过预编译元数据来加快初始化速度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接