< Summary

Information
Class: Api.Database.Utils.EFTransactionDIAccessorService
Assembly: Api
File(s): /home/runner/work/ProjectRead.ing/ProjectRead.ing/Api/Database/Utils/EFTransactionDIAccessorService.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 21
Coverable lines: 21
Total lines: 48
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 10
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
BeginOrGetTransaction()0%620%
BeginOrGetTransactionAsync()0%620%
FinishTransaction()0%620%
System.IDisposable.Dispose()0%620%
DisposeAsync()0%620%

File(s)

/home/runner/work/ProjectRead.ing/ProjectRead.ing/Api/Database/Utils/EFTransactionDIAccessorService.cs

#LineLine coverage
 1// SPDX-FileCopyrightText: 2026 Alper Çelik <[email protected]>
 2//
 3// SPDX-License-Identifier: AGPL-3.0-or-later
 4
 5using Microsoft.EntityFrameworkCore.Storage;
 6namespace Api.Database.Utils;
 7
 8public interface IEFTransactionDIAccessorService : IAsyncDisposable, IDisposable
 9{
 10    public IDbContextTransaction BeginOrGetTransaction();
 11    public Task<IDbContextTransaction> BeginOrGetTransactionAsync();
 12}
 13
 014public class EFTransactionDIAccessorService(PGContext db) : IEFTransactionDIAccessorService
 15{
 16    private IDbContextTransaction? _tx;
 17
 18    public IDbContextTransaction BeginOrGetTransaction()
 019    {
 020        return _tx ?? db.Database.BeginTransaction();
 021    }
 22
 23    public async Task<IDbContextTransaction> BeginOrGetTransactionAsync()
 024    {
 025        return _tx ?? await db.Database.BeginTransactionAsync();
 026    }
 27
 28    public async ValueTask FinishTransaction()
 029    {
 030        if (_tx is not null)
 031            await _tx.DisposeAsync();
 32
 033        _tx = null;
 034    }
 35
 36    void IDisposable.Dispose()
 037    {
 038        GC.SuppressFinalize(this);
 039        _tx?.Dispose();
 040    }
 41
 42    public async ValueTask DisposeAsync()
 043    {
 044        GC.SuppressFinalize(this);
 045        if (_tx is not null)
 046            await _tx.DisposeAsync();
 047    }
 48}