![](/img/trans.png)
[英]How to get current user id on Angular and Asp.Net Boilerplate?
[英]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 继承了AbpController
、 BackgroundJob
、 AbpServiceBase
等内容,您也可以使用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 }
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.