< Summary

Information
Class: LOCKnet.Data.Repositories.RepositoryBase
Assembly: LOCKnet.Data
File(s): /home/runner/work/LOCKnet/LOCKnet/src/LOCKnet.Data/Repositories/RepositoryBase.cs
Line coverage
100%
Covered lines: 23
Uncovered lines: 0
Coverable lines: 23
Total lines: 61
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
.ctor(...)100%11100%
GetConnection()100%11100%
ConfigureConnection(...)100%11100%

File(s)

/home/runner/work/LOCKnet/LOCKnet/src/LOCKnet.Data/Repositories/RepositoryBase.cs

#LineLine coverage
 1using Microsoft.Data.Sqlite;
 2
 3namespace LOCKnet.Data.Repositories;
 4
 5/// <summary>
 6/// Abstrakte Basisklasse für alle SQLite-Repositories.
 7/// Hält den Connection-String und öffnet bei Bedarf eine neue Verbindung.
 8/// Jede Methode öffnet eine eigene Verbindung — kein Connection-Pooling.
 9/// </summary>
 10public abstract class RepositoryBase
 11{
 12  private readonly ISqliteConnectionFactory _connectionFactory;
 13
 14  /// <summary>SQLite-Connection-String fuer diese Repository-Instanz.</summary>
 15  protected readonly string _connectionString;
 16  protected readonly string? _databasePath;
 17
 18  /// <summary>
 19  /// Initialisiert eine neue Instanz von <see cref="RepositoryBase"/>.
 20  /// </summary>
 21  /// <param name="connectionString">Der vollständige SQLite-Connection-String.</param>
 22  protected RepositoryBase(string connectionString)
 12523    : this(PlainSqliteConnectionFactory.FromConnectionString(connectionString))
 12524  {
 12525  }
 26
 27  /// <summary>
 28  /// Initialisiert eine neue Instanz von <see cref="RepositoryBase"/> mit einer zentralen Connection-Factory.
 29  /// </summary>
 30  /// <param name="connectionFactory">Factory fuer Storage-spezifische SQLite-Verbindungen.</param>
 32231  protected RepositoryBase(ISqliteConnectionFactory connectionFactory)
 32232  {
 32233    ArgumentNullException.ThrowIfNull(connectionFactory);
 34
 32235    _connectionFactory = connectionFactory;
 32236    _connectionString = connectionFactory.Storage.ConnectionString;
 32237    _databasePath = connectionFactory.Storage.DatabasePath;
 32238  }
 39
 40  /// <summary>
 41  /// Öffnet eine neue SQLite-Verbindung und gibt sie zurück.
 42  /// Der Caller ist verantwortlich für das Schließen (via <c>using</c>).
 43  /// </summary>
 44  /// <returns>Eine geöffnete <see cref="Microsoft.Data.Sqlite.SqliteConnection"/>.</returns>
 45  protected SqliteConnection GetConnection()
 65746    => _connectionFactory.OpenConnection();
 47
 48  internal static void ConfigureConnection(SqliteConnection conn)
 85149  {
 85150    using var cmd = conn.CreateCommand();
 85151    cmd.CommandText = @"
 85152                PRAGMA foreign_keys = ON;
 85153                PRAGMA journal_mode = DELETE;
 85154                PRAGMA synchronous = FULL;
 85155                PRAGMA temp_store = MEMORY;
 85156                PRAGMA secure_delete = ON;
 85157                PRAGMA busy_timeout = 5000;
 85158                PRAGMA locking_mode = NORMAL;";
 85159    cmd.ExecuteNonQuery();
 170060  }
 61}