对于我拥有的类,我注意到我基本上必须对类中的每个函数使用以下场景。这是低效的吗?有没有更好的利用 DataContext 对象?
using (var context = new SomeDataContext(getConnectionString))
{
//linq query here
}
对于我拥有的类,我注意到我基本上必须对类中的每个函数使用以下场景。这是低效的吗?有没有更好的利用 DataContext 对象?
using (var context = new SomeDataContext(getConnectionString))
{
//linq query here
}
它旨在按照您提到的方式使用。每次在数据库上做某事时,都应该创建一个新的上下文。正如@Dan 指出的那样,创建上下文非常快速和高效。
这是一种正确且正确的方法,因为它保证您通过将连接放在using
子句中来处理连接。实例化 DBContext 也不是非常昂贵。
话虽如此,每次查询数据库并立即处理它时,您都会创建一个 DBContext,因此您没有利用 DbContext 类提供的缓存和其他细节。
每个请求只创建一个 DBContext 的一种“廉价而肮脏”的方法是实例化一个 onApplication_BeginRequest
并将其存储在HttpContext.Items
集合中(基本上在临时缓存中)并在Application_EndRequest
. DBContext
然后,项目中的每个类都会从HttpContext.Items
缓存中获取当前并使用它。连接将被正确处理,因为Application_EndRequest
无论错误如何都会触发。
更好的选择是使用依赖注入框架(结构图、Ninject 等)。您可以在谷歌上搜索有关如何执行此操作的教程。如果您有兴趣实施它,SO 有几个问题可以帮助您。
个人注意事项:除非您注意到您的应用程序执行速度太慢而无法接受,否则不要担心任何这些事情。你目前的方法很好。