public bool UpdateUserProfile(Person updatedPerson)
        {
            try
            {
                var regContext = new RegistrationDbContext();

                //get existing person
                var person = _contextProvider.Context.People.Include(x => x.Contact).Include(x=> x.Address).SingleOrDefault(p => p.Id == updatedPerson.Id);

                #region update meta data properties
                person.LastChangeDate = DateTime.UtcNow;
                person.Address.LastChangeDate = DateTime.UtcNow;
                if (person.HomeAddress != null)
                    person.HomeAddress.LastChangeDate = DateTime.UtcNow;
                person.Contact.LastChangeDate = DateTime.UtcNow;
                person.LastChangePersonId = person.Id;
                person.Address.LastChangePersonId = person.Id;
                if (person.HomeAddress != null)
                   person.HomeAddress.LastChangePersonId = person.Id;
                person.Contact.LastChangePersonId = person.Id;
                #endregion  

                #region update person details
                person.Salutation = updatedPerson.Salutation;
                person.FirstName = updatedPerson.FirstName;
                person.LastName = updatedPerson.LastName;
                person.MiddleName = updatedPerson.MiddleName;
                person.Suffix = updatedPerson.Suffix;
                person.Title = updatedPerson.Title;

                person.Contact.Phone = updatedPerson.Contact.Phone;
                person.Contact.Fax = updatedPerson.Contact.Fax;
                person.Contact.Cell = updatedPerson.Contact.Cell;

                person.Address.AddressLine1 = updatedPerson.Address.AddressLine1;
                person.Address.AddressLine2 = updatedPerson.Address.AddressLine2;
                person.Address.CityLocality = updatedPerson.Address.CityLocality;
                person.Address.StateProvince = updatedPerson.Address.StateProvince;
                person.Address.Country = updatedPerson.Address.Country;
                person.Address.PostalCode = updatedPerson.Address.PostalCode;

                #endregion 

                regContext.People.Attach((person));
                regContext.Entry(person).State = System.Data.Entity.EntityState.Modified;

                if (person.Address != null)
                    regContext.Entry(person.Address).State = System.Data.Entity.EntityState.Modified;
                if (person.HomeAddress != null)
                    regContext.Entry(person.HomeAddress).State = System.Data.Entity.EntityState.Modified;
                if (person.Contact != null)
                    regContext.Entry(person.Contact).State = System.Data.Entity.EntityState.Modified;
                regContext.SaveChanges();

                return true;

            }
            catch (Exception ex)
            {
                throw ex;
            }

        }
        /// <summary>
        /// Inserts a new record inot the People table
        /// </summary>
        /// <param name="person"></param>
        /// <returns></returns>
        public bool CreatePerson(Person person)
        {
            try
            {

                #region Setup metadata properties

                //Set meta data properties.
                person.UniqueId = Guid.NewGuid();
                person.CreatedDate = DateTime.UtcNow;
                person.LastChangeDate = DateTime.UtcNow;

                person.Address.UniqueId = Guid.NewGuid();
                person.Address.CreatedDate = DateTime.UtcNow;
                person.Address.LastChangeDate = DateTime.UtcNow;

                if (person.HomeAddress != null)
                {
                    person.HomeAddress.UniqueId = Guid.NewGuid();
                    person.HomeAddress.CreatedDate = DateTime.UtcNow;
                    person.HomeAddress.LastChangeDate = DateTime.UtcNow;
                }

                person.Contact.UniqueId = Guid.NewGuid();
                person.Contact.CreatedDate = DateTime.UtcNow;
                person.Contact.LastChangeDate = DateTime.UtcNow;

                //Temporarily set unknown values.
                person.Address.CreatedPersonId = 1;
                person.Address.LastChangePersonId = 1;
                if (person.HomeAddress != null)
                {
                    person.HomeAddress.CreatedPersonId = 1;
                    person.HomeAddress.LastChangePersonId = 1;
                }
                person.Contact.CreatedPersonId = 1;
                person.Contact.LastChangePersonId = 1;

                #endregion

                var regContext = new RegistrationDbContext();
                regContext.People.Add((person));
                regContext.SaveChanges();

                #region Update Model

                person.ContactId = person.Contact.Id;
                person.AddressId = person.Address.Id;
                if (person.HomeAddress != null)
                {
                    person.HomeAddressId = person.HomeAddress.Id;
                }

                //Update the person record with the correct created and last change person Ids.
                person.CreatedPersonId = person.Id;
                person.LastChangePersonId = person.Id;
                person.Address.CreatedPersonId = person.Id;
                person.Address.LastChangePersonId = person.Id;
                if (person.HomeAddress != null)
                {
                    person.HomeAddress.CreatedPersonId = person.Id;
                    person.HomeAddress.LastChangePersonId = person.Id;
                }
                person.Contact.CreatedPersonId = person.Id;
                person.Contact.LastChangePersonId = person.Id;

                #endregion

                regContext.People.Attach((person));
                regContext.Entry(person).State = System.Data.Entity.EntityState.Modified;

                if (person.Address != null)
                    regContext.Entry(person.Address).State = System.Data.Entity.EntityState.Modified;
                if (person.HomeAddress != null)
                    regContext.Entry(person.HomeAddress).State = System.Data.Entity.EntityState.Modified;
                if (person.Contact != null)
                    regContext.Entry(person.Contact).State = System.Data.Entity.EntityState.Modified;
                regContext.SaveChanges();

                return true;

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }