linq to sql如何与sql连接一起使用?

时间:2010-01-21 10:49:25

标签: .net linq-to-sql

使用linq数据上下文的最佳方法是什么?链接如何与sql连接一起工作(何时打开连接以及何时关闭连接)?当我处理数据上下文时,我是否应该使用using语句?

很抱歉问题列表。提前谢谢。

1 个答案:

答案 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部分开始。