private async Task FindOutIds(SaleCoreModel sale)
        {
            if (await Customers.DoesCustomerExistAsync(sale.Customer).ConfigureAwait(false))
            {
                sale.Customer.Id = await Customers.GetIdAsync(sale.Customer.FirstName, sale.Customer.LastName)
                                   .ConfigureAwait(false);
            }
            else
            {
                ThrowArgumentException("There is no such Customer. Register it!");
            }

            if (await Managers.DoesManagerExistAsync(sale.Manager))
            {
                sale.Manager.Id = await Managers.GetIdAsync(sale.Manager.LastName).ConfigureAwait(false);
            }
            else
            {
                ThrowArgumentException("There is no such Manager. Register it!");
            }

            if (await Products.DoesProductExistAsync(sale.Product))
            {
                sale.Product.Id = await Products.GetIdAsync(sale.Product.Name).ConfigureAwait(false);
            }
            else
            {
                ThrowArgumentException("There is no such Product. Register it!");
            }
        }
        public async Task <SaleCoreModel> UpdateAsync(SaleCoreModel sale)
        {
            Locker.EnterWriteLock();
            try
            {
                await FindOutIds(sale).ConfigureAwait(false);

                var result = Sales.Update(sale);
                await Sales.SaveAsync().ConfigureAwait(false);

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