我应该共享实体框架上下文还是为每个操作创建一个新上下文?

Posted

技术标签:

【中文标题】我应该共享实体框架上下文还是为每个操作创建一个新上下文?【英文标题】:Should I share the Entity-Framework context or create a new context for each operation? 【发布时间】:2010-10-02 05:23:10 【问题描述】:

关于使用和重用实体框架Context 的最佳实践我不是很清楚。

我的问题是,我应该尝试创建 1 个上下文并将其多次重复用于不同的查询,还是应该为每个查询创建一个新的上下文?

例如,如果我有一个包含 10 个图表的表单,所有图表的数据都是从同一个表中查询的,那么这 10 个查询应该来自一个上下文还是 10 个不同的上下文?

从代码封装的角度来看,我更愿意创建 10 个新的上下文,这是个好主意吗?它是否可扩展?

【问题讨论】:

【参考方案1】:

这完全取决于您的应用。

一个关键的考虑因素是 ObjectContext 不是线程安全的,因此对于 Web 应用程序来说,每个请求的 ObjectContext 都是可行的方法。

对于 Win Forms 应用程序,您可以考虑拥有更长寿命的 ObjectContexts。但是,如果您希望更紧密地确定范围,我会先尝试,而不是过早地对其进行优化。

更多关于丹尼西蒙斯博客here。

【讨论】:

感谢您的链接,它提供了我需要的信息,让我可以轻松地为我的问题中的情况创建不同的上下文。此外,我之前没有注意到 Detach 方法,因此它将在以后的项目中派上用场。【参考方案2】:

恕我直言 - 我可能是错的,但我就是这样做的......

如果您在谈论模型 - 上下文,请使用一个。由于您只需要一个模型 - 用于查询的上下文 - 即这是数据库模型。

如果您正在谈论 ObjectContext - 每个查询 (Linq) 一个。 看看这个Performance Considerations for Entity Framework

【讨论】:

一个非常好的链接,它有助于减轻在创建许多上下文时对性能的一些担忧。

以上是关于我应该共享实体框架上下文还是为每个操作创建一个新上下文?的主要内容,如果未能解决你的问题,请参考以下文章

我应该为我的基类使用实体框架上的啥继承策略?

实体框架 4:为所有实体创建单个图表是不是有意义?

使用实体框架、代码优先和 CRUD 操作的存储库模式

DTO 应该代表嵌套实体结构,还是应该将我的路径设置为每个嵌套对象都有一个端点?

我应该使用主题框架还是从头开始创建Wordpress主题?

我应该为 Realm 中的每个实体定义主键吗?