2009-04-24 61 views
4

我最近继承了使用Linq2SQL的ASP.Net应用程序。目前,它的DataContext对象在每个页面中声明为静态,并且在第一次找到它们时它们是空的(单例,有点)。使用DataContext静态变量

我需要评论,如果这是好还是坏。在我只需要从数据库读取以及需要写入的情况下。

如何为整个应用程序提供一个DataContext实例?

回答

6

每个应用程序的一个DataContext表现不好,恐怕。对于初学者来说,DataContext不是线程安全的,因此即使使用一个作为页面的静态成员也不是一个好主意。 asgerhallas提到,将上下文用于工作单元(通常是单个请求)是理想的。除此之外,你会开始发现你的所有数据都在内存中,你不会在没有明确刷新的情况下看到更新。以下是与这两个主题交谈的几个帖子:Identity MapsUnits of Work

4

我使用每个请求都有一个DataContext,但它取决于您面对的场景。 我认为L2S的意义在于将它与工作单元模式一起使用,在这种模式下,每个工作单元都有一个上下文。但是它在大型应用程序中效果不佳,因为稍后将实体重新附加到新的上下文相当困难。

里克施特拉尔有一个真正的好介绍的话题在这里:

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

一个我可以说我已经在过去,是问题有一个上下文来读取和写入场景事情。在数据上下文中完成的更改跟踪在您刚刚阅读时是相当大的开销,这是大多数Web应用程序大部分时间执行的操作。你可以只读数据上下文,它会加快事情的速度 - 但是你需要另外的上下文来写。