繁体   English   中英

如何在 ASP.NET 样板中获取当前事务?

[英]How to get current transaction in ASP.NET Boilerplate?

我有一个编写 ASP.NET Boilerplate 的项目(程序集版本 = 4.0.2.0)。

我想在应用层获得当前的交易 object。 我怎样才能做到这一点?

您可以使用IUnitOfWorkManager获得当前的工作单元。

IUnitOfWorkManager _unitorWorkManager;
//...
[UnitOfWork]
public void Test(){
    /*
    Your code
    */
    
    _unitOfWorkManager.Current//gives you current unit of work
        .SaveChanges();//same thing with transaction.Commit();
}

如果您的 class 继承了AbpControllerBackgroundJobAbpServiceBase等内容,您也可以使用CurrentUnitOfWork

//...
[UnitOfWork]
public void Test(){
    /*
    Your code
    */

    CurrentUnitOfWork.SaveChanges();//same thing with transaction.Commit();
}

您可以查看https://aspnetboilerplate.com/Pages/Documents/Unit-Of-Work了解更多信息。


编辑:我想不可能直接在应用层得到它,因为它需要 dbcontext 参数。 如何创建一个提供 ActiveDbTransaction 的域服务。 您可以在*.Core项目中为此创建一个接口,并在可以访问 dbcontext 的位置定义它

public interface IMyDbContextActiveTransactionProvider
{
    /// <summary>
    ///     Gets the active transaction or null if current UOW is not transactional.
    /// </summary>
    /// <param name="args"></param>
    /// <returns></returns>
    IDbTransaction GetActiveTransaction(ActiveTransactionProviderArgs args);
}

在可以访问 dbcontext 的地方实现它

public class MyDbContextActiveTransactionProvider: IMyDbContextActiveTransactionProvider, ITransientDependency {
    private readonly IActiveTransactionProvider _transactionProvider;
    public MyDbContextActiveTransactionProvider(IActiveTransactionProvider transactionProvider){
        _transactionProvider = transactionProvider;
    }

    IDbTransaction GetActiveTransaction(ActiveTransactionProviderArgs args){
        return _transactionProvider.GetActiveTransaction(new ActiveTransactionProviderArgs
        {
            {"ContextType", typeof(MyDbContext) },
            {"MultiTenancySide", MultiTenancySide }
        });
     }
}

https://aspnetboilerplate.com/Pages/Documents/Articles/Using-Stored-Procedures,-User-Defined-Functions-and-Views/index.html#DocHelperMethods

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM