Skip to content

Integration SqlClient Extension

Aryeh Citron edited this page Apr 29, 2026 · 5 revisions

The TestTrackingDiagrams.Extensions.SqlClient package adds SQL Server operation tracking to your test diagrams via Microsoft.Data.SqlClient's built-in DiagnosticSource instrumentation. No production code changes required.

Zero production changes. SqlClient emits diagnostic events automatically. This extension subscribes to them globally, so every SqlConnection in the process is tracked.


How It Works

Microsoft.Data.SqlClient publishes DiagnosticSource events under "SqlClientDiagnosticListener". The SqlClientDiagnosticTracker subscribes and handles both modern (WriteCommandBefore/WriteCommandAfter) and legacy (ExecuteReader.Start/ExecuteReader.Stop) event naming patterns. Commands are correlated via OperationId GUID, classified by UnifiedSqlClassifier, and logged to RequestResponseLogger.


Install

dotnet add package TestTrackingDiagrams.Extensions.SqlClient

Setup

Option A — Dependency Injection

services.AddSqlServerTestTracking(options =>
{
    options.Verbosity = SqlTrackingVerbosityLevel.Detailed;
});

Option B — Static (No DI)

SqlClientTestTracking.EnsureTracking(new SqlClientTrackingOptions
{
    Verbosity = SqlTrackingVerbosityLevel.Detailed
});

// In teardown:
SqlClientTestTracking.Reset();

Configuration

Property Default Description
ServiceName "SQL Server" Participant name in diagrams
Verbosity Detailed Raw, Detailed, or Summarised
LogSqlText false Include full SQL text in Detailed mode
LogParameters false Include parameter values
DependencyCategory "SqlServer" Controls participant shape/colour
UriScheme "sqlserver" URI scheme in diagram URIs

All options inherit from SqlTrackingOptionsBase.


Verbosity Levels

Level Arrow label URI
Raw Full SQL text sqlserver://host/database
Detailed SELECT FROM Users sqlserver://host/database/Users
Summarised SELECT sqlserver:///database/Users

Home


Demo


Getting Started

Common Tasks

Integration Guides

Extensions

Configuration

Features

Reference

Clone this wiki locally