Вы получаете текущую единицу работы с использованием IUnitOfWorkManager
.
IUnitOfWorkManager _unitorWorkManager;
//...
[UnitOfWork]
public void Test(){
/*
Your code
*/
_unitOfWorkManager.Current//gives you current unit of work
.SaveChanges();//same thing with transaction.Commit();
}
Если ваш класс наследует что-то вроде AbpController
, BackgroundJob
, AbpServiceBase
et c ..., вы также можно использовать 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, - Пользовательские-функции-и-представления / index.html # DocHelperMethods