public void Remove(Product product)
        {
            using (var context = new BakeryContext())
            {
                context.Products.Remove(
                    context.Products.Find(product.Id.Id)
                );

                context.SaveChanges();
            }
        }
        public void Remove(Owner owner)
        {
            using (var context = new BakeryContext())
            {
                context.Owners.Remove(
                    context.Owners.Find(owner.Id.Id)
                );

                try
                {
                    context.SaveChanges();
                }
                catch (DbUpdateException e)
                {

                    throw new RepositoryException(e.Message, e);
                }
            }
        }
        public void Save(Owner owner)
        {
            using (var context = new BakeryContext())
            {
                var existingDto = context.Owners
                    .Include("Phones")
                    .Include("OwnerAddress")
                    .FirstOrDefault(o => o.Id == owner.Id.Id) ?? new Context.Shop.Owner();

                var newDto = Mapper.ToDto(owner);

                var id = newDto.Id;

                if (context.Owners.Any(e => e.Id == id))
                {
                    var updatedPhones = newDto.Phones.ToList();
                    var existingPhones = existingDto.Phones.ToList();

                    var addedPhones = updatedPhones.Except(existingPhones).ToList();
                    var deletedPhones = existingPhones.Except(updatedPhones).ToList();
                    var modifiedPhones = updatedPhones.Except(addedPhones).ToList();

                    addedPhones.ForEach(phn => context.Entry(phn).State = EntityState.Added);
                    deletedPhones.ForEach(phn => context.Entry(phn).State = EntityState.Deleted);

                    foreach (var phone in modifiedPhones)
                    {
                        var existingPhone = context.OwnerPhones
                            .FirstOrDefault(phn => phn.Equals(phone));

                        if (existingPhone == null)
                        {
                            continue;
                        }
                        var phoneEntry = context.Entry(existingPhone);
                        phoneEntry.CurrentValues.SetValues(phone);
                    }

                    var ownerEntry = context.Entry(existingDto);
                    ownerEntry.CurrentValues.SetValues(newDto);
                    var ownerAddressEntry = context.Entry(existingDto.OwnerAddress);
                    ownerAddressEntry.CurrentValues.SetValues(newDto.OwnerAddress);
                }
                else
                {
                    context.Owners.Add(newDto);
                }

                try
                {
                    context.SaveChanges();
                }
                catch (DbUpdateException e)
                {

                    throw new RepositoryException(e.Message, e);
                }
            }
        }
        public void Save(Product product)
        {
            using (var context = new BakeryContext())
            {
                var dto = context.Products.Find(product.Id.Id) ?? new Context.Product.Product();

                Mapper.MapToDto(product, dto);

                context.Set<Context.Product.Product>().AddOrUpdate(dto);
                context.SaveChanges();
            }
        }