如何在 ASP.NET 样板中获取当前交易?
How to get current transaction in ASP.NET Boilerplate?
我有一个项目编写了 ASP.NET 样板文件(程序集版本=4.0.2.0)。
我想在应用层获取当前交易对象。我怎样才能做到这一点?
您使用 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 }
});
}
}
我有一个项目编写了 ASP.NET 样板文件(程序集版本=4.0.2.0)。
我想在应用层获取当前交易对象。我怎样才能做到这一点?
您使用 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 }
});
}
}