LINQ to SQL中的经典事务处理模式之间有什么区别:
using(var context = Domain.Instance.GetContext()) { try { context.Connection.Open(); context.Transaction = context.Connection.BeginTransaction(); /*code*/ context.Transaction.Commit(); } catch { context.Transaction.Rollback(); } }
与TransactionScope对象
using (var context = Domain.Instance.GetContext()) using (var scope = new TransactionScope()) { try { /*code*/ scope.Complete(); } catch { } }
Linq2SQL将使用隐式事务。如果所有更新都在一个Submit中完成,则您可能不需要自己处理事务。
从文档(重点是我的):
调用SubmitChanges时,LINQ to SQL会检查该调用是否在事务范围内,或者是否将Transaction属性(IDbTransaction)设置为用户启动的本地事务。 如果找不到任何事务,则LINQ to SQL将启动本地事务(IDbTransaction)并使用它执行生成的SQL命令。 成功完成所有SQL命令后,LINQ to SQL提交本地事务并返回。