默认情况下,LINQ to SQL 是否始终使用事务?

Does LINQ to SQL always use Transactions by default?

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

有人知道吗?

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

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

您问题的正确答案是否定的。

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

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