Linq to sql linq to sql:是否需要显式创建事务?

Linq to sql linq to sql:是否需要显式创建事务?,linq-to-sql,transactions,Linq To Sql,Transactions,每当L2S在工作中需要执行多个查询时,我都会使用TransactionScope显式创建一个事务。今天我的同事告诉我,他从不手动创建事务,因为L2是在SubmitChanges级别创建事务的。我很困惑,所以我做了一些示例代码来测试它。据我所知,结果是——他是对的。 我的问题是,它是从linq到sql的一开始就可用的,还是在某些.net版本/service pack中添加的? 在网上,有很多关于如何使用事务处理L2S的示例,所以我不确定这些人是否都会错过它?只要你做了所有更改,然后一次性调用Sub

每当L2S在工作中需要执行多个查询时,我都会使用TransactionScope显式创建一个事务。今天我的同事告诉我,他从不手动创建事务,因为L2是在SubmitChanges级别创建事务的。我很困惑,所以我做了一些示例代码来测试它。据我所知,结果是——他是对的。 我的问题是,它是从linq到sql的一开始就可用的,还是在某些.net版本/service pack中添加的?
在网上,有很多关于如何使用事务处理L2S的示例,所以我不确定这些人是否都会错过它?

只要你做了所有更改,然后一次性调用
SubmitChanges()
,事务就会自动创建


您唯一需要担心
TransactionScope
的时候是在多次调用
SubmitChanges()时
或者您需要一个跨多个上下文工作的事务。

如果您想在一个事务中包装多个查询和多个调用以保存更改,那么显式事务范围确实有价值……但是如果您正在保存对象图(将生成多个insert/update语句到数据库),调用SaveChanges时,所有这些语句都将自动包装在事务中。

L2S自早期Beta以来已为SubmitChanges创建了事务。这就是允许在发生异常时回滚操作的功能(请参见
SubmitChanges(ConflictMode.ContinueOnConflict)