Linq to sql DataContext的最佳使用模式

Linq to sql DataContext的最佳使用模式,linq-to-sql,.net-3.5,Linq To Sql,.net 3.5,DataContext的最佳生存期模型是什么?我是否应该在需要时创建一个新类(也称为函数级),是否应该在每个使用它的类中保留一个新类(类级),还是应该创建一个具有静态DataContext的静态类(应用程序域级)?在这方面有什么经过深思熟虑的最佳实践吗?我认为杰夫·阿特伍德(Jeff Atwood)在被问及完全相同的问题时,在《纽约时报》上谈到了这一点。在最后的15-20分钟左右听它 我这样认为,datacontext是在Controller类中创建的。这里有很多细节我不太清楚。但这就是它看起来

DataContext
的最佳生存期模型是什么?我是否应该在需要时创建一个新类(也称为函数级),是否应该在每个使用它的类中保留一个新类(类级),还是应该创建一个具有静态DataContext的静态类(应用程序域级)?在这方面有什么经过深思熟虑的最佳实践吗?

我认为杰夫·阿特伍德(Jeff Atwood)在被问及完全相同的问题时,在《纽约时报》上谈到了这一点。在最后的15-20分钟左右听它


我这样认为,datacontext是在Controller类中创建的。这里有很多细节我不太清楚。但这就是它看起来的样子。

如果您要存储将在以后
.SubmitChanges()
'd进行的更改,则在要执行的操作的整个生命周期中,您非常需要保持相同的数据上下文可用,否则您将丢失这些更改

如果你只是在查询东西,那么可以根据需要创建它们,但是如果以后你想
.SubmitChanges()
你将不得不大量重构你的代码,因此你也可以从一开始就采用有效地在整个应用程序中保持
datacontext
全局的模式

注意,数据上下文已断开连接。只有在枚举查询数据时(不是在第一次运行查询时,它是一种“惰性”数据类型,因此仅在需要时提供数据),才会建立连接,然后立即关闭连接。在
.SubmitChanges()
上,打开连接以提交更改,然后立即关闭。因此,不要认为保持
datacontext
保持连接的打开状态,事实并非如此(你可以挂接连接的
StateChange
事件来确认这一点,这就是我确信的方式)

有一篇很好的文章深入讨论了这个话题,远远超过了我的答案