public async Task <CustomerCoreModel> AddAsync(CustomerCoreModel customer)
        {
            Locker.EnterWriteLock();
            try
            {
                if (await Customers.TryAddUniqueCustomerAsync(customer).ConfigureAwait(false))
                {
                    await Customers.SaveAsync().ConfigureAwait(false);

                    return(await GetAsync(await Customers.GetIdAsync(customer.FirstName, customer.LastName)
                                          .ConfigureAwait(false)).ConfigureAwait(false));
                }
                else
                {
                    throw new ArgumentException("Customer already exists!");
                }
            }
            finally
            {
                if (Locker.IsWriteLockHeld)
                {
                    Locker.ExitWriteLock();
                }
            }
        }
        public async Task <CustomerCoreModel> UpdateAsync(CustomerCoreModel customer)
        {
            Locker.EnterWriteLock();
            try
            {
                if (await Customers.DoesCustomerExistAsync(customer).ConfigureAwait(false))
                {
                    throw new ArgumentException("Customer already exists!");
                }

                var result = Customers.Update(customer);
                await Customers.SaveAsync().ConfigureAwait(false);

                return(result);
            }
            finally
            {
                if (Locker.IsWriteLockHeld)
                {
                    Locker.ExitWriteLock();
                }
            }
        }
 public async Task <CustomerCoreModel> UpdateAsync(CustomerCoreModel model)
 {
     return(await CustomerDbReaderWriter.UpdateAsync(model).ConfigureAwait(false));
 }