public async Task <EntityResult> SaveAsync(CancellationToken cancellationToken = default)
        {
            try {
                _logger.LogInformation("Attempt to Save Data", Array.Empty <object>());
                await _context.SaveChangesAsync(cancellationToken).ConfigureAwait(false);

                _logger.LogInformation("Data has been saved!", Array.Empty <object>());
                return(EntityResult.Success);
            }
            catch (DbUpdateConcurrencyException ex) {
                _logger.LogError(ex,
                                 "Unable to save data changes due to concurrency check violation");
                return(EntityResult.Failed());
            }
            catch (DbUpdateException ex) {
                _logger.LogError(ex, "Unable to save data changes");
                return(EntityResult.Failed());
            }
        }
        public async Task <EntityResult> SaveAsync(DbTransaction transaction,
                                                   CancellationToken cancellationToken = default)
        {
            if (transaction == null)
            {
                _logger.LogError("A transaction is required!");
                return(EntityResult.Failed());
            }

            try {
                _logger.LogInformation("Attempt to Save Data", Array.Empty <object>());
                await _context.Database.UseTransactionAsync(transaction, cancellationToken);

                await _context.SaveChangesAsync(cancellationToken).ConfigureAwait(false);

                _logger.LogInformation("Data has been saved!", Array.Empty <object>());
                return(EntityResult.Success);
            }
            catch (DbUpdateConcurrencyException ex) {
                _logger.LogError(ex,
                                 "Unable to save data changes due to concurrency check violation",
                                 Array.Empty <object>());
                return(EntityResult.Failed(new Error.Error(1, "ConcurrencyError",
                                                           new Dictionary <string, string> {
                    { "msg", "Unable to save data changes due to concurrency check violation" },
                    { "exception", ex.Message }
                })));
            }
            catch (DbUpdateException ex) {
                _logger.LogError(ex, "Unable to save data changes", Array.Empty <object>());
                return(EntityResult.Failed(new Error.Error(2, "DbUpdateError",
                                                           new Dictionary <string, string> {
                    { "msg", "Unable to save data changes" },
                    { "exception", ex.Message }
                })));
            }
        }