【问题标题】:How linq to sql works with sql connections?linq to sql 如何与 sql 连接一起使用?
【发布时间】:2010-01-21 10:49:24
【问题描述】:

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

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

【问题讨论】:

    标签: .net linq-to-sql


    【解决方案1】:

    这里有很多内容 - 我会给你我的盆栽观点 - 然后给你一些链接等以帮助你进一步。

    不过,关于这个网站还有许多其他类似的问题 - 所以请搜索一下,您会发现更多。

    终身

    • 您不需要需要将 using 语句与 Linq-To-Sql 数据上下文一起使用,但是当您使用'重做。因此 using 块是最好的方法,因为它是 try ... finally {} 语义。所以,在我看来,您应该使用using 块。

    • 您应该不长时间保持 linq to sql 数据上下文打开,因为在上下文打开的每个对象中都会发生更改跟踪 - 它会损害性能并可能导致意外行为。

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

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

    相关数据

    如果您有相关数据 - 即表 A -> 表 B,则知道 DataContext (DC) 的默认设置是在从 A 上的子属性访问时延迟加载 B 中的相关行。因此,如果如果您打算在创建和处理用于选择的 DC 的代码之外将您的 linq 之一传回 sql 生成的类,您可以得到 ObjectDisposedExceptions 被抛出。

    为了避免这种情况 - 您可以使用 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 部分开始。

    【讨论】:

    • 谢谢安德拉斯!你的回答真的很棒。代码示例并不是真正需要的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    相关资源
    最近更新 更多