代码之家  ›  专栏  ›  技术社区  ›  iburlakov

Linq to SQL如何处理SQL连接?

  •  1
  • iburlakov  · 技术社区  · 15 年前

    使用LINQ数据上下文的最佳方法是什么?链接如何使用SQL连接(它什么时候打开连接,什么时候关闭连接)?在处理数据上下文时,我应该单独使用using语句吗?

    抱歉,有问题。事先谢谢。

    1 回复  |  直到 15 年前
        1
  •  6
  •   Andras Zoltan    15 年前

    这里有很多要介绍的-我会给你我的盆景-然后给你一些链接等,以帮助你进一步。

    不过,在这个网站上还有许多类似的问题,所以搜索一下,你会发现更多。

    寿命

    • 你不 需要 使用 using 带有Linq to SQL DataContext的语句,但完成后必须将其释放。因此,使用块是最好的方法,因为它是尝试…最后语义。所以,在我看来,你 应该 使用A 使用 块。

    • 你应该 将Linq to SQL数据上下文保持长时间打开,因为上下文打开的每个对象中都会发生更改跟踪,这会损坏性能并可能导致意外行为。

    • 据我所知,SQL连接在构造上下文时打开,在释放上下文时关闭。

    因此,当您想要选择、插入、更新或删除数据时,应该打开LINQ to SQL上下文,然后在完成后关闭它。例如,通过同一个DC插入100个记录是可以的;更新或删除也是可以的。但是,我可能不会选择一种类型的几千条记录,更新几千条记录,然后在一个上下文中删除更多其他记录——主要是出于性能原因。

    相关数据

    如果您有相关的数据(即表A->表B),则知道DataContext(DC)的默认值是在从A上的子属性访问时,在B中延迟加载相关行。因此,如果您打算将一个Linq传递回在创建和处理用于选择的DC的代码之外生成的SQL类,则可以使用C一个GET ObjectDisposedException 被扔了。

    为了避免这种情况,您可以使用dataloadOptions.loadWith<>和dataloadOptions.associateWith<>来减轻这种情况,这也会在选择一行时强制预取相关行。但是,这会增加从数据库中读取的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 -这是一个Linq的博客搜索-向下滚动,并翻页,你会找到所有不同的部分,从2007年5月的第1部分开始。