【问题标题】:Does LINQ to SQL always use Transactions by default?LINQ to SQL 是否总是默认使用事务?
【发布时间】:2015-01-13 16:54:35
【问题描述】:

我正在进行代码安全分析,但我很难确定(在文档中)LINQ 在进行所需操作时是否总是使用事务,或者我是否必须指定一些特殊的属性/参数。

有人知道吗?

【问题讨论】:

  • 这取决于哪个“LINQ”。例如,LINQ to XML 根本不涉及数据库。
  • 我发现Entity Framework 6会在使用Database.ExecuteSqlCommand()的情况下将sql命令包装在事务中。

标签: c# sql asp.net linq transactions


【解决方案1】:

在一般情况下,LINQ 只是提供一些关于定义 LINQ 查询的代码的查询提供程序信息。查询提供者可以做它想做的任何事情作为它的实现。它可能使用事务,也可能不使用。如果您愿意,您可以编写自己的查询提供程序,将每个查询包装在一个事务块中,或者您可以编写一个不这样做的提供程序。您需要查看文档(或进行一些测试)以了解您正在使用的任何特定查询提供程序(可能还有特定查询,因为它可能因查询而异)以查看该查询提供程序如何将 LINQ 表达式转换为 SQL .

【讨论】:

  • 也许你可以稍微扩展一下“LINQ”的定义和它之间的区别,说“LinqToSql”
  • @Bishoy 我觉得我确实解释了两者之间的区别。您期望包含哪些未包含的内容?对 LINQ 是什么以及它如何与查询提供程序交互的深入解释将很快变得很长,并且会有点切题。
【解决方案2】:

你的问题的正确答案是NO。

话虽如此,你问错了问题。 LINQ 用于查询数据,查询不使用事务。但是,您在 LINQ 下使用的提供程序可能能够更改它是否在查询时忽略、跳过或等待锁定的记录,但这不是 LINQ 的一部分。

然而,具有支持事务的数据提供者的实体框架将默认执行事务,这可能是您要问的。

【讨论】:

    【解决方案3】:

    不,它不是您在以 BEGIN TRANS 开头的存储过程中看到的原子事务。您必须登记 System.Transactions 命名空间并将您的 using 块包装在事务中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      相关资源
      最近更新 更多