我在我的服务器上有几个长时间运行的任务。它们基本上像是定时任务 - 定期运行。
它们都需要访问数据库,我使用Entity Framework进行访问。每个任务都使用一个DbContext进行访问。
在每次运行时,DbContext对象应该重新创建还是重复使用?
我在我的服务器上有几个长时间运行的任务。它们基本上像是定时任务 - 定期运行。
它们都需要访问数据库,我使用Entity Framework进行访问。每个任务都使用一个DbContext进行访问。
在每次运行时,DbContext对象应该重新创建还是重复使用?
我应该说“这取决于情况”,因为可能存在两种答案都是合理的情况,但最合理的答案是“只要不再需要,就应该立即释放上下文”,实际上意味着“尽早释放而非拖延”。
这种答案所带来的风险是,新手有时会得出结论,上下文应该尽可能经常被释放,这有时会导致我审查代码时发现连续的“using”块,每个块都创建一个上下文,在其中执行一两个操作,然后释放,并且下一行又出现了另一个上下文。当然,这也是不推荐的。
对于Web应用程序,自然生命周期与Web请求的生命周期相关联。对于系统服务/其他长时间运行的应用程序,生命周期策略之一是“每个业务流程实例”/“每个用例实例”,其中业务处理/用例实现定义了分离上下文实例的自然边界。
是的,DbContext 只应该在非常短的时间内存在。它实际上是您的工作单元。
每次使用它时都应该创建它。(好吧,你应该注入它,但这是另一个讨论 :-))