예제 #1
0
        public async Task SaveContact(ContactModel Model)
        {            
            var entity = AutoMapper.Mapper.Map<Contact>(Model);

            if (entity.Id == Guid.Empty)
            {
                entity.Id = Guid.NewGuid();

                entity.ContactEmail.ToList().ForEach(x => x.Id = Guid.NewGuid());
                entity.ContactPhone.ToList().ForEach(x => x.Id = Guid.NewGuid());
                entity.ContactTag.ToList().ForEach(x => x.Id = Guid.NewGuid());

                Context.Contact.Add(entity);
            }
            else
            {                
                foreach (var item in entity.ContactPhone)
                {
                    if (item.Id == Guid.Empty)
                    {
                        item.Id = Guid.NewGuid();
                        Context.ContactPhone.Add(item);
                    }
                    else
                    {
                        var phoneEntry = Context.Entry(item);
                        phoneEntry.State = item.Id == Guid.Empty ? EntityState.Added : EntityState.Modified;
                    }
                }

                var deletedPhone = Context.ContactPhone.Where(x => x.ContactId == Model.Id).ToList()
                    .Where(x => !entity.ContactPhone.Select(t => t.Id).Contains(x.Id)).ToList();
                Context.ContactPhone.RemoveRange(deletedPhone);

                foreach (var item in entity.ContactEmail)
                {
                    if (item.Id == Guid.Empty)
                    {
                        item.Id = Guid.NewGuid();
                        Context.ContactEmail.Add(item);
                    }
                    else
                    {
                        var emailEntry = Context.Entry(item);
                        emailEntry.State = item.Id == Guid.Empty ? EntityState.Added : EntityState.Modified;
                    }
                }

                var deletedMail = Context.ContactEmail.Where(x => x.ContactId == Model.Id).ToList()
                    .Where(x => !entity.ContactEmail.Select(t => t.Id).Contains(x.Id)).ToList();
                Context.ContactEmail.RemoveRange(deletedMail);

                foreach (var item in entity.ContactTag)
                {
                    if (item.Id == Guid.Empty)
                    {
                        item.Id = Guid.NewGuid();
                        Context.ContactTag.Add(item);
                    }
                    else
                    {
                        var tagEntry = Context.Entry(item);
                        tagEntry.State = item.Id == Guid.Empty ? EntityState.Added : EntityState.Modified;
                    }
                }

                var deletedTag = Context.ContactTag.Where(x => x.ContactId == Model.Id).ToList()
                    .Where(x => !entity.ContactTag.Select(t => t.Id).Contains(x.Id)).ToList();
                Context.ContactTag.RemoveRange(deletedTag);

                var entry = Context.Entry(entity);
                entry.State = EntityState.Modified;                

            }

            await Context.SaveChangesAsync();         
        }
예제 #2
0
        public async Task<IHttpActionResult> SaveContact(ContactModel Model)
        {            
            await DAL.SaveContact(Model);

            return Ok();
        }