使用linq数据上下文的最佳方法是什么?链接如何与sql连接一起工作(何时打开连接以及何时关闭连接)?当我处理数据上下文时,我是否应该使用using语句?
很抱歉问题列表。提前谢谢。
答案 0 :(得分:6)
这里有很多内容 - 我会给你我的盆景 - 然后给你一些链接等,以帮助你进一步。
此网站上还有许多其他类似的问题,但是搜索也是如此,你会发现更多。
<强>寿命强>
您没有 需要 将using
语句与Linq-To-Sql DataContext一起使用,但您必须将其处理掉当你完成了。因此,使用块是最好的方法,因为它的尝试... finally {}语义。因此,在我看来,应该使用using
块。
你应该不保持linq长时间打开sql数据上下文,因为上下文打开的每个对象都会发生更改跟踪 - 它会损害性能并导致意外行为。
据我所知,Sql Connection在构造上下文时打开,在处理时关闭。
因此,当您想要选择,插入,更新或删除数据时,应该打开linq to sql context,然后在完成后关闭它。例如,通过相同的DC插入100条记录就可以了。正如更新或删除一样。但是,我可能不会选择一种类型的几千条记录,更新几千条记录,然后在一个上下文中删除另外一条记录 - 主要是出于性能原因。
相关数据
如果您有相关数据 - 即表A - >表B,然后知道DataContext(DC)的默认值是从A上的子属性访问时延迟加载B中的相关行。因此,如果您打算将一个linq传递回sql生成的类在创建和处理用于选择的DC的代码之外,可以使ObjectDisposedException
被抛出。
为避免这种情况,您可以使用DataLoadOptions.LoadWith&lt;&gt;和DataLoadOptions.AssociateWith&lt;&gt;还可以缓解这种情况 - 当选择一行时,会强制预取相关行。但是,这会增加您的Linq To Sql查询从数据库读取的数据量,因此您 不 通常总是应用预取所有查询的所有相关记录 - 仅限于您知道需要的那些记录。
抱歉,我没有提供代码示例或其他任何内容 - 在一个答案中有很多内容可以覆盖 - 但这里有一些链接:
Rick Strahl talking about Linq To Sql DC lifetimes
Dinesh of Microsoft talking about the same
Scott Guthrie - 9 Part Linq to SQL Series - 这是他博客上的搜索的缩影 - 向下滚动,翻页,你会发现所有不同的部分,从2007年5月的第1部分开始。