public void Update(Contact obj) { using (var session = _context.OpenSession()) { var contact = session.Get <Contact>(obj.Id); if (contact != null) { using (var transaction = session.BeginTransaction()) { //Contact contact.Name = obj.Name; contact.Company = obj.Company; contact.Address = obj.Address; session.Save(contact); //Add Telephones foreach (var item in obj.Telephones) { if (!contact.Telephones.Any(x => x.Number == item.Number)) { _telephoneRepository.Save(item); } } //Delete Telephones foreach (var item in contact.Telephones) { if (!obj.Telephones.Any(x => x.Number == item.Number)) { _telephoneRepository.Delete(item.Id); } } //Add Emails foreach (var item in obj.Emails) { if (!contact.Emails.Any(x => x.EmailAddress == item.EmailAddress)) { _emailRepository.Save(item); } } //Delete Emails foreach (var item in contact.Emails) { if (!obj.Emails.Any(x => x.EmailAddress == item.EmailAddress)) { _emailRepository.Delete(item.Id); } } transaction.Commit(); } } } }