使用DataContext静态变量

时间:2009-04-24 16:05:11

标签: asp.net linq-to-sql datacontext

我最近使用Linq2SQL继承了一个ASP.Net应用程序。目前,它的DataContext对象在每个页面中都声明为static,我在第一次发现它们为null(单例,排序)时创建它们。

如果好或坏,我需要评论。在我只需要从DB读取的情况下以及我需要写入的情况下。

如何为整个应用程序只安装一个DataContext实例?

2 个答案:

答案 0 :(得分:6)

我担心,每个应用程序的一个DataContext会表现不佳。对于初学者来说,DataContext不是线程安全的,因此即使使用一个作为页面的静态成员也是一个坏主意。正如asgerhallas所提到的,将上下文用于工作单元是理想的 - 通常是单个请求。还有其他任何东西,你会开始发现你的所有数据都在内存中,如果没有明确的刷新,你就不会看到更新。以下是与这两个主题相关的几篇帖子:Identity MapsUnits of Work

答案 1 :(得分:4)

我习惯每个请求都有一个DataContext,但这取决于你所面临的场景。 我认为L2S的关键在于将它与工作单元模式一起使用,在这种情况下,每个工作单元都有一个上下文。但它在大型应用程序中不能很好地工作,因为以后很难将实体重新附加到新的上下文中。

Rick Strahl对这个主题有一个很好的介绍:

http://www.west-wind.com/weblog/posts/246222.aspx

我可以说我过去遇到过一些问题,就是在读写方案中都有一个上下文。当您刚刚阅读时,在datacontext中完成的更改跟踪是一个非常大的开销,这是大多数Web应用程序在大多数情况下都会执行的操作。你可以只读取datacontext,它会加速一些事情 - 但是你需要另一个写作的上下文。