数据上下文应该是静态的吗?

8
我正在使用实体框架4,我在其中一个基类中为模型创建了一个数据上下文。但是在对其进行分析时,每次尝试查询时都会创建上下文,因此我考虑将其设置为静态,以便仅创建一次并始终重复使用。
您认为这是最好的方法吗?数据/对象上下文应该始终是静态的吗?使其静态有什么缺点吗?数据上下文应该是静态还是非静态的?欢迎任何想法或建议。

在SO上有很多关于DataContext和ObjectContext生命周期的问题。http://stackoverflow.com/search?q=Datacontext+lifetime - Ian Mercer
可能是LinqToSql静态DataContext在Web应用程序中的重复问题。 - Ian Mercer
2个回答

9

不,它们不应该总是静态的。

与非静态等效项相比(比如来自多个线程的多个用户从分离会话访问同一上下文),使用静态数据上下文可能会出现更多问题。

我不会详细解释,因为有一些非常好的博客文章涵盖了详细信息:

Linq to SQL DataContext Lifetime Management - Rick Strahl's Web Log(可能看起来不相关,但仍然是)

Making Entity Framework (v1) work, Part 1: DataContext Lifetime Management(如果您不喜欢Rick的解决方案,则可以考虑此可能替代方案)


5
数据上下文是否应该始终是静态的?
不,它们(几乎)永远不应该是静态的。DataContext的创建成本很低,因为它们被设计为工作单元。因此,您应该针对每个“会话”(无论对于您的上下文意味着什么)拥有一个DataContext。
*:正确的答案可能是它们永远不应该是静态的,但我总是对那些总是或从不提供编程建议持怀疑态度。因此,这只是一种微小的调整,而已。

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