/// <summary>
 ///     Updates or inserts an entity and returns true if successful.
 /// </summary>
 /// <typeparam name="T">The type of entity to update or insert.</typeparam>
 /// <param name="entityToUpsert">The Entity to update or insert.</param>
 /// <param name="columnsToUpdate">The columns to update if the record exists.</param>
 /// <param name="insertAction">A callback function before the record is inserted.</param>
 /// <param name="updateAction">A callback function before the record is updated.</param>
 /// <returns>
 ///     True if the record is updated or inserted.
 /// </returns>
 public async Task <bool> UpsertAsync <T>(T entityToUpsert, IEnumerable <string> columnsToUpdate,
                                          Action <T> insertAction, Action <T> updateAction) where T : class => await ExecuteInternalAsync(() =>
                                                                                                                                          SharedConnection.UpsertAsync(entityToUpsert, columnsToUpdate, insertAction, updateAction, _transaction,
                                                                                                                                                                       OneTimeCommandTimeout ?? CommandTimeout));
 /// <summary>
 ///     Updates or inserts an entity and returns true if successful.
 /// </summary>
 /// <typeparam name="T">The type of entity to update or insert.</typeparam>
 /// <param name="entityToUpsert">The Entity to update or insert.</param>
 /// <returns>
 ///     True if the record is updated or inserted.
 /// </returns>
 public async Task <bool> UpsertAsync <T>(T entityToUpsert) where T : class => await ExecuteInternalAsync(() =>
                                                                                                          SharedConnection.UpsertAsync(entityToUpsert, _transaction, OneTimeCommandTimeout ?? CommandTimeout));