C# 在一个类中执行LINQ的许多DataContext单例

C# 在一个类中执行LINQ的许多DataContext单例,c#,asp.net,linq,linq-to-sql,C#,Asp.net,Linq,Linq To Sql,对于我拥有的一个类,我注意到我基本上必须对一个类中的每个函数使用以下场景。这是低效的吗?是否有更好的方法来利用DataContext对象 using (var context = new SomeDataContext(getConnectionString)) { //linq query here } 它是按照你提到的方式设计的。每次对数据库执行操作时,都应该创建一个新的上下文。正如@Dan所指出的,创建上下文是非常快速和高效的。这是一种正确和正确的方法,因为它保证您通过使用子句将连

对于我拥有的一个类,我注意到我基本上必须对一个类中的每个函数使用以下场景。这是低效的吗?是否有更好的方法来利用DataContext对象

using (var context = new SomeDataContext(getConnectionString))
{
   //linq query here
}

它是按照你提到的方式设计的。每次对数据库执行操作时,都应该创建一个新的上下文。正如@Dan所指出的,创建上下文是非常快速和高效的。

这是一种正确和正确的方法,因为它保证您通过使用
子句将连接放入
中来处理连接。实例化DBContext的成本也不高

话虽如此,您每次查询数据库时都会创建一个DBContext并立即处理它,因此您没有利用DBContext类提供的缓存和其他细节

每个请求只创建一个DBContext的一种“廉价且肮脏”的方法是在
应用程序\u BeginRequest
上实例化一个DBContext,并将其存储在
HttpContext.Items
集合中(基本上在临时缓存中),然后在
应用程序\u EndRequest
上处理它。然后,项目中的每个类将从
HttpContext.Items
缓存中获取当前的
DBContext
,并使用它。连接将被正确处理,因为无论出现什么错误,
Application\u EndRequest
都会启动

一个更好的替代方法是使用依赖注入框架(结构图、Ninject等),您可以在谷歌上搜索如何实现这一点的教程。如果您有兴趣实施它,那么有几个问题可以帮助您


个人提示:除非你注意到你的应用程序运行太慢,无法接受,否则不要担心这些事情。您当前的方法很好。

我已经编辑了您的标题。请看“”,其中的共识是“不,他们不应该”。@Dan:正确的链接是。请不要在旧版本的.NET上发布文档链接。@JohnSaunders感谢您指出这一点。我很粗心。这不是故意的。感谢您提供了正确的一个。