/
vshmidt
/
masstransit
Обзор
Документация
Войти
/
vshmidt
/
masstransit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/Persistence/MassTransit.EntityFrameworkIntegration/EntityFrameworkIntegration/Saga/PessimisticSagaRepositoryLockStrategy.cs
44 строки
1 KB
Chris Patterson
Integration of all external packages into MassTransit, split out into Abstractions, Middleware, and the core MassTransit assembly.
22 янв 2022, 18:24
22 янв 2022, 18:24
b5b4f50
Код
Авторство
О чём код?
namespace MassTransit.EntityFrameworkIntegration.Saga { using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Linq; using System.Threading; using System.Threading.Tasks; public class PessimisticSagaRepositoryLockStrategy<TSaga> : ISagaRepositoryLockStrategy<TSaga> where TSaga : class, ISaga { readonly ILoadQueryExecutor<TSaga> _executor; public PessimisticSagaRepositoryLockStrategy(ILoadQueryExecutor<TSaga> executor, IsolationLevel isolationLevel) { _executor = executor; IsolationLevel = isolationLevel; } public IsolationLevel IsolationLevel { get; } public Task<TSaga> Load(DbContext context, Guid correlationId, CancellationToken cancellationToken) { return _executor.Load(context, correlationId, cancellationToken); } public async Task<SagaLockContext<TSaga>> CreateLockContext(DbContext context, ISagaQuery<TSaga> query, CancellationToken cancellationToken) { IList<Guid> instances = await context.Set<TSaga>() .AsNoTracking() .Where(query.FilterExpression) .Select(x => x.CorrelationId) .ToListAsync(cancellationToken) .ConfigureAwait(false); return new PessimisticSagaLockContext<TSaga>(context, cancellationToken, instances, _executor); } } }