为了帮助大家更好地学习 LINQ to SQL 技术,微软论坛技术支持团队编辑了一些列的 LINQ to SQL 常见问题及解答" 精华帖。
本帖的主题是:怎样控制DataContext的生存期?
如果您觉得这个帖子对您的学习、工作有所帮助,请再把这个帖子分享给你的同学、同事和朋友。
如果您想阅读更多的 "LINQ to SQL 常见问题及解答",请打开索引页面:
http://social.msdn.microsoft.com/Forums/zh-CN/adonetzhchs/thread/f968dfe5-f9e3-4ed0-9c7f-cf26837ea828
一般来说,DataContext是一个短命对象。它的目的是最后一个“unit of work”当然,你的应用程序定义了那个术语。一个DataContext是轻量级的,不是昂贵的创建,一个典型的LINQ to SQL应用程序在方法中或者作为一个生命周期短的类的成员创建DataContext实例,那些代表了相关数据库操作的逻辑集合。但是,我们也可以保持实体的生命周期较长并且有必要的话在不同的DataContext对象中间传递,特别是对于那些Web应用程序。我们可以找到讨论这个问题的许多帖子和博客:
http://blogs.msdn.com/dinesh.kulkarni/archive/2008/04/27/lifetime-of-a-linq-to-sql-datacontext.aspx
http://social.msdn.microsoft.com/Forums/en-US/linqprojectgeneral/thread/3abec116-46b3-4f87-be89-8e3cb7202409
http://social.msdn.microsoft.com/Forums/en-US/linqprojectgeneral/thread/5a2d8026-d47c-4e1f-ac47-3561f84bd859
http://social.msdn.microsoft.com/Forums/en-US/linqprojectgeneral/thread/5db5ac37-1cc3-4500-a778-955d2a80e7f6
http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/ea6fe19c-cd21-40d1-b005-750af6632bfe
然而,这不是绝对的答案。有时候我们可能需要DataContext实例长时间保存。怎样去管理DataContext的生存期是有我们程序中具体的场景决定的。Rick Strahl(MVP)有一篇讨论这个问题超级棒的博客文章:
http://www.west-wind.com/weblog/posts/246222.aspx
Rick总结了这些不同的途径来管理DataContext:
· 为每个原子操作创建一个新的Context(应用程序级的管理)
· 创建一个全局的DataContext和处理所有跟它冲突的操作
· 创建一个线程特定的DataContext
· 创建每个业务对象的DataContext