Exemplo n.º 1
0
 public void Delete(Client entity)
 {
     _context.Entry(entity).State = EntityState.Deleted;
 }
        public Clients Update(int id, Clients client)
        {
            string photo = "";

            using (var fu = new ImageUploader(client.Image))
            {
                photo = fu.SaveFile(_env.ContentRootPath);
            }

            client.Photo = photo;


            var existingClient = _context.Clients.Where(p => p.ClientId == id).Include(p => p.PhoneNumbers).SingleOrDefault();

            _context.Entry(existingClient).CurrentValues.SetValues(client);

            // update phone numbers
            foreach (var item in existingClient.PhoneNumbers.ToList())
            {
                if (!client.PhoneNumbers.Any(c => c.PhoneNumberId == item.PhoneNumberId))
                {
                    _context.PhoneNumbers.Remove(item);
                }
            }

            foreach (var phoneNumber in client.PhoneNumbers)
            {
                var existingNumber = existingClient.PhoneNumbers
                                     .Where(c => c.PhoneNumberId == phoneNumber.PhoneNumberId)
                                     .SingleOrDefault();

                if (phoneNumber.PhoneNumberId == 0)
                {
                    existingNumber = null;
                }

                if (existingNumber != null)
                {
                    _context.Entry(existingNumber).CurrentValues.SetValues(phoneNumber);
                }
                else
                {
                    existingClient.PhoneNumbers.Add(phoneNumber);
                }
            }

            // update relations
            foreach (var item in existingClient.RelatedClientsClient.ToList())
            {
                if (!client.RelatedClientsClient.Any(c => c.RelatedClientsId == item.RelatedClientsId))
                {
                    _context.RelatedClients.Remove(item);
                }
            }

            foreach (var relatedClient in client.RelatedClientsClient)
            {
                var existingRelation = existingClient.RelatedClientsClient
                                       .Where(c => c.RelatedClientsId == relatedClient.RelatedClientsId)
                                       .SingleOrDefault();

                if (relatedClient.RelatedClientsId == 0)
                {
                    existingRelation = null;
                }

                if (existingRelation != null)
                {
                    _context.Entry(existingRelation).CurrentValues.SetValues(relatedClient);
                }
                else
                {
                    existingClient.RelatedClientsClient.Add(relatedClient);
                }
            }

            //_context.SaveChangesAsync();

            return(client);
        }