如何使用工作单元和存储库模式回滚事务

本文关键字:模式 回滚事务 存储 何使用 工作 单元 | 更新日期: 2023-09-27 18:09:38

我有一个用户存储库,它执行所有用户数据访问。我还有一个工作类单元,用于管理存储库的连接和事务。如果存储库中发生错误,如何有效地回滚工作类单元上的事务?

在UserRepository上创建方法。我正在使用Dapper进行数据访问。

try
{
    this.Connection.Execute("User_Create", parameters, this.Transaction, 
        commandType: CommandType.StoredProcedure);
}
catch (Exception)
{
    //Need to tell my unit of work to rollback the transaction.                
}

我将在我的工作单元构造函数中创建的连接和事务传递给我的存储库。下面是我的工作单元的一个属性:

public UserRepository UserRepository
{
    get
    {
        if (this._userRepository == null)
            this._userRepository = 
                new UserRepository(this._connection, this._transaction);
        return this._userRepository;
    }
}

我希望找到最好的方法。

* Update *在对工作单元模式做了更多的研究之后,我认为我在我的例子中完全错误地使用了它。

如何使用工作单元和存储库模式回滚事务

Dapper支持TransactionScope,它提供了一个Complete()方法来提交事务,如果你不调用Complete(),事务将被中止。

using (TransactionScope scope = new TransactionScope())
{
   //open connection, do your thing
   scope.Complete();
}