Я разрабатываю службу веб-API .NET Core и использую следующий метод в BL:
public async Task<SetParams> GetParams(CreateRequest request)
{
var user = await _userRepository.GetUserByLogin(request.Login);
var client = await _clientRepository.GetClientByCode( request.ClientCode);
// many other getters here
return new SetParams
{
IdUser = user.IdUser,
ClientName = client.Name,
// and so forth...
};
}
У меня есть требование, чтобы все объекты находились в режиме «грязного чтения».
Итак, я пытался использовать TransactionScope следующим образом:
public async Task<SetParams> GetParams(CreateRequest request)
{
using (var ts = new TransactionScope(
TransactionScopeOption.Required,
new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted }))
{
var user = await _userRepository.GetUserByLogin(request.Login);
var client = await _clientRepository.GetClientByCode(request.ClientCode);
// many other getters here
ts.Complete();
return new SetParams
{
IdUser = user.IdUser,
ClientName = client.Name,
// and so forth...
};
}
}
Но: 1) это прочитало зафиксированный режим (я знаю из это сообщение о том, что я должен начать транзакцию, но у меня здесь нет сеанса или контекста базы данных, потому что я нахожусь в BL, а не в DAL)
и 2) получение исключения TransactionScope должен быть размещен в том же потоке, в котором он был создан.
TransactionScopeAsyncFlowOption
, который должен адресовать 2. - person Damien_The_Unbeliever   schedule 03.09.2018