EF中的DbContext的寿命是否短?

时间:2013-09-22 19:38:31

标签: c# entity-framework

我的服务器上有一些长时间运行的任务。基本上它们就像预定的任务 - 它们不时运行。

他们都需要访问数据库,我使用实体框架。每个任务都使用DbContext进行访问。

是否应该在每次运行时重新创建DbContext对象,还是应该重用它?

2 个答案:

答案 0 :(得分:4)

我应该说“它取决于”,因为有可能两种答案都是有效的,但最合理的答案是“上下文应该在不需要时立即处理”,这在实践中意味着“处理时间比后”。

这种答案带来的风险是新手有时会得出结论,上下文应尽可能地作为otfen处理,这有时会导致我审查的代码,其中有连续的“使用”创建上下文,将其用于一个或两个操作,dispose然后另一个上下文出现在下一行。当然也不建议这样做。

对于Web应用程序,自然生命周期与Web请求的生命周期相关联。在系统服务/其他长期运行的应用程序的情况下,生命周期策略之一是“每个业务流程实例”/“每个用例实例”,其中业务处理/用例实现定义了自然边界,其中单独的上下文实例是有意义的。

答案 1 :(得分:0)

是的,DbContext应该只能活很短的时间。它实际上是您的工作单元

每次你要使用它时,你一定要创建它。 (好吧,你应该注入它,但这是另一个讨论: - ))


更新:好的,我接受“每次你要使用它时创建它”可能会产生误导。我已经习惯了上下文是一个被注入的类的实例,因此只能在请求的生命中生存,我很难以任何其他方式来考虑它... @ wiktor的答案肯定更好,因为它更正确地表达你应该“尽快处置”的想法