一尘不染

LINQ to SQL中的TransactionScope与事务

c#

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
    {
    }
}

阅读 499

收藏
2020-05-19

共1个答案

一尘不染

Linq2SQL将使用隐式事务。如果所有更新都在一个Submit中完成,则您可能不需要自己处理事务。

从文档(重点是我的):

调用SubmitChanges时,LINQ to
SQL会检查该调用是否在事务范围内,或者是否将Transaction属性(IDbTransaction)设置为用户启动的本地事务。
如果找不到任何事务,则LINQ to SQL将启动本地事务(IDbTransaction)并使用它执行生成的SQL命令。
成功完成所有SQL命令后,LINQ to SQL提交本地事务并返回。

2020-05-19