/// <summary>
 ///     Called just after EF has called <see cref="DbConnection.Open()" />.
 /// </summary>
 /// <param name="connection"> The connection. </param>
 /// <param name="eventData"> Contextual information about the connection. </param>
 public virtual void ConnectionOpened(DbConnection connection, ConnectionEndEventData eventData)
 {
 }
 /// <summary>
 ///     Called just after EF has called <see cref="DbConnection.OpenAsync()" />.
 /// </summary>
 /// <param name="connection"> The connection. </param>
 /// <param name="eventData"> Contextual information about the connection. </param>
 /// <param name="cancellationToken"> The cancellation token. </param>
 /// <returns> A <see cref="Task"/> representing the asynchronous operation. </returns>
 public virtual Task ConnectionOpenedAsync(
     DbConnection connection,
     ConnectionEndEventData eventData,
     CancellationToken cancellationToken = default)
 => Task.CompletedTask;
 /// <summary>
 ///     Called just after EF has called <see cref="DbConnection.CloseAsync()" />.
 /// </summary>
 /// <param name="connection"> The connection. </param>
 /// <param name="eventData"> Contextual information about the connection. </param>
 /// <returns> A <see cref="Task"/> representing the asynchronous operation. </returns>
 public virtual Task ConnectionClosedAsync(
     DbConnection connection,
     ConnectionEndEventData eventData)
 => Task.CompletedTask;