[Orcas] 15. LINQ to SQL - Transaction

[ 2007-08-21 15:18:39 | 作者: yuhen ]
字号: | |
DLinq 对事务的支持非常灵活。缺省情况下,DataContext.SubmitChanges() 就会自动启动一个事务,确保所有操作在同一个事务下进行。
public class DataContext : IDisposable
{
    public virtual void SubmitChanges(ConflictMode failureMode)
    {
        // 省略部分代码...
        
        transaction = this.provider.Connection.BeginTransaction(IsolationLevel.ReadCommitted);
        this.provider.Transaction = transaction;
        
        new ChangeProcessor(this.services, this).SubmitChanges(failureMode);
        
        this.AcceptChanges();
        this.provider.ClearConnection();
        
        transaction.Commit();
        return;

        // 省略部分代码...
    }
}

我们还可以显示启用 DataContext 的事务。
using (DataClasses1DataContext context = new DataClasses1DataContext(connStr))
{
    context.Transaction = context.Connection.BeginTransaction();
    try
    {
        var user = new User { Name = "wangwu", Age = 14 };
        context.Users.Add(user);
        context.SubmitChanges();

        context.Transaction.Commit();
    }
    catch
    {
        context.Transaction.Rollback();
    }
}

同样,我们可以使用 System.Transactions.TransactionScope 创建跨 DataContext 的分布事务环境。
using (TransactionScope scope = new TransactionScope())
{
    try
    {
        using (DataClasses1DataContext context = new DataClasses1DataContext(connStr))
        {
            var user = new User { Name = "wangwu", Age = 14 };
            context.Users.Add(user);
            context.SubmitChanges();
        }

        using (DataClasses1DataContext context = new DataClasses1DataContext(connStr))
        {
            var user = new User { Name = "wangwu", Age = 14 };
            context.Users.Add(user);
            context.SubmitChanges();
        }

        scope.Complete();
    }
    catch
    {
    }
}
[最后修改由 yuhen, 于 2007-09-08 15:56:25]
评论Feed 评论Feed: http://www.rainsts.net/feed.asp?q=comment&id=539

这篇日志没有评论。

发表评论
表情图标
[smile] [confused] [cool] [cry]
[eek] [angry] [wink] [sweat]
[lol] [stun] [razz] [redface]
[rolleyes] [sad] [yes] [no]
[heart] [star] [music] [idea]
UBB代码
转换链接
表情图标
悄悄话
用户名:   密码:  
验证码 * 请输入验证码