[英]How to get current transaction in ASP.NET Boilerplate?
I have a project that written ASP.NET Boilerplate (assembly version=4.0.2.0).我有一个编写 ASP.NET Boilerplate 的项目(程序集版本 = 4.0.2.0)。
I want get current transcation object in Application layer.我想在应用层获得当前的交易 object。 How can I achieve this?
我怎样才能做到这一点?
You get current unit of work with using IUnitOfWorkManager
.您可以使用
IUnitOfWorkManager
获得当前的工作单元。
IUnitOfWorkManager _unitorWorkManager;
//...
[UnitOfWork]
public void Test(){
/*
Your code
*/
_unitOfWorkManager.Current//gives you current unit of work
.SaveChanges();//same thing with transaction.Commit();
}
If your class inherits something like AbpController
, BackgroundJob
, AbpServiceBase
etc..., you can also use CurrentUnitOfWork
.如果您的 class 继承了
AbpController
、 BackgroundJob
、 AbpServiceBase
等内容,您也可以使用CurrentUnitOfWork
。
//...
[UnitOfWork]
public void Test(){
/*
Your code
*/
CurrentUnitOfWork.SaveChanges();//same thing with transaction.Commit();
}
You can check https://aspnetboilerplate.com/Pages/Documents/Unit-Of-Work for more information.您可以查看https://aspnetboilerplate.com/Pages/Documents/Unit-Of-Work了解更多信息。
Edit: I guess it is not possible to get it in application layer directly since it need dbcontext parameter.编辑:我想不可能直接在应用层得到它,因为它需要 dbcontext 参数。 What about creating a domain service which provides ActiveDbTransaction.
如何创建一个提供 ActiveDbTransaction 的域服务。 You can create an interface for that in
*.Core
project and define it where you can access to dbcontext您可以在
*.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);
}
Implement it someplace you can access to dbcontext在可以访问 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 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.