0

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

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

2 回答 2

2

它旨在按照您提到的方式使用。每次在数据库上做某事时,都应该创建一个新的上下文。正如@Dan 指出的那样,创建上下文非常快速和高效。

于 2013-06-26T20:22:58.267 回答
0

这是一种正确且正确的方法,因为它保证您通过将连接放在using子句中来处理连接。实例化 DBContext 也不是非常昂贵。

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

每个请求只创建一个 DBContext 的一种“廉价而肮脏”的方法是实例化一个 onApplication_BeginRequest并将其存储在HttpContext.Items集合中(基本上在临时缓存中)并在Application_EndRequest. DBContext然后,项目中的每个类都会从HttpContext.Items缓存中获取当前并使用它。连接将被正确处理,因为Application_EndRequest无论错误如何都会触发。

更好的选择是使用依赖注入框架(结构图、Ninject 等)。您可以在谷歌上搜索有关如何执行此操作的教程。如果您有兴趣实施它,SO 有几个问题可以帮助您。

个人注意事项:除非您注意到您的应用程序执行速度太慢而无法接受,否则不要担心任何这些事情。你目前的方法很好。

于 2013-06-26T20:42:53.230 回答