什么是 DataContext
的最佳生命周期模型? 我应该仅在需要时创建一个新的(即函数级别),还是在每个使用它的类中保留一个可用的(类级别),或者我应该创建一个具有静态DataContext的静态类(应用程序域级别)? 是否有任何最佳实践可以考虑?
什么是 DataContext
的最佳生命周期模型? 我应该仅在需要时创建一个新的(即函数级别),还是在每个使用它的类中保留一个可用的(类级别),或者我应该创建一个具有静态DataContext的静态类(应用程序域级别)? 是否有任何最佳实践可以考虑?
如果您想存储稍后要提交的更改,则基本上需要在操作的整个生命周期中保持相同的数据上下文可用,否则您将会丢失这些更改。
如果您只是查询一些内容,则可以根据需要创建它们,但是如果以后您想要 .SubmitChanges()
,则必须大量重构代码,因此最好从一开始就采用有效地保持应用程序中的 datacontext
全局的模式。
请注意,数据上下文是断开连接的。仅当枚举查询数据时(不是在首次运行查询时,它是一种“惰性”数据类型,因此仅在需要数据时提供数据),才会建立连接,然后立即关闭。在 .SubmitChanges()
上,打开连接以提交更改,然后立即关闭。因此,请不要认为保留 datacontext
会保持连接处于打开状态,它不会(您可以挂钩连接的 StateChange
事件来自行确认,这就是我确定的方法)。
在Rick Strahl的博客上有一篇很棒的文章,深入探讨了这个主题,比我在这里提供的回答要详细得多!
我认为Jeff Atwood在Herding Code podcast中谈到了这个问题,当时他被问到了同样的事情。建议你听一下最后15-20分钟的内容。
我认为在SO中,datacontext是在Controller类中创建的。关于很多细节我不太确定,但是看起来是这样的。