我正在开发一个 .NET Core web api 服务并在 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) 以异常结束A TransactionScope 必须在创建它的同一线程上处理。