public static List <TMember> ToDataStoreList <T, TMember>(this IContextDataObjectList <T> list) where T : IPrimary, IContextDataObject, new() { dynamic returnList = null; if (list.Count > 0) { Type itemType = list.FirstOrDefault().GetType(); if (itemType == typeof(MemberAddressData)) { List <MailingAddress> addressList = new List <MailingAddress>(); foreach (T address in list) { MemberAddressData addressItem = (MemberAddressData)(IMemberAddress)address; MailingAddress addressData = new MailingAddress { Id = GetGuidFromDataContextObject(addressItem), AddressLine1 = addressItem.AddressLine1, AddressLine2 = addressItem.AddressLine2, AddressLine3 = addressItem.AddressLine3, City = addressItem.City, County = addressItem.County, StateProvince = addressItem.StateProvince, PostalCode = addressItem.PostalCode, Country = addressItem.Country, PassedValidation = addressItem.PassedValidation, PassedValidationOn = addressItem.PassedValidationOn, Primary = addressItem.IsPrimary }; addressList.Add(addressData); } returnList = addressList; return(returnList); } else if (itemType == typeof(MemberPhoneData)) { List <PhoneNumber> phoneList = new List <PhoneNumber>(); foreach (T number in list) { MemberPhoneData phoneItem = (MemberPhoneData)(IMemberPhone)number; PhoneNumber phoneNumberData = new PhoneNumber { Id = GetGuidFromDataContextObject(phoneItem), Number = phoneItem.PhoneNumber, Type = phoneItem.PhoneType, PassedValidation = phoneItem.PassedValidation, PassedValidationOn = phoneItem.PassedValidationOn, Primary = phoneItem.IsPrimary }; phoneList.Add(phoneNumberData); } returnList = phoneList; return(returnList); } else if (itemType == typeof(MemberEmailData)) { List <EmailAddress> emailList = new List <EmailAddress>(); foreach (T email in list) { MemberEmailData emailItem = (MemberEmailData)(IMemberEmail)email; EmailAddress emailData = new EmailAddress { Id = GetGuidFromDataContextObject(emailItem), Address = emailItem.Address, PassedValidation = emailItem.PassedValidation, PassedValidationOn = emailItem.PassedValidationOn, Primary = emailItem.IsPrimary }; emailList.Add(emailData); } returnList = emailList; return(returnList); } } return(returnList); }
public override IMemberProfileData UpdateMemberProfile(IMemberProfileData profile, Dictionary <String, Object> providerKeys = null) { SqlProfile profileData = profile.ToSqlProfile(); if (profileData != null) { try { SqlProfile profileInStore = GetMemberProfileData(profile.MemberId); if (profileInStore != null) { DbEntityEntry entry = _dataContext.Entry(profileInStore); if (entry != null) { entry.CurrentValues.SetValues(profileData); /* * if (profileData.Phones != null && profileData.Phones.Count > 0) * { * * entry.Collection("Phones").EntityEntry.CurrentValues.SetValues(profileData.Phones); * entry.Collection("Phones").EntityEntry.CurrentValues.SetValues(profileData.Phones); * }*/ } } else { //If there is no profile then we need to create it return(CreateMemberProfile(profile)); } if (profileData.Addresses != null && profileData.Addresses.Count > 0) { foreach (MailingAddress address in profileData.Addresses) { MailingAddress lookup = profileInStore.Addresses.FirstOrDefault(a => a.Id == address.Id); if (lookup != null) { DbEntityEntry mailEntry = _dataContext.Entry(lookup); mailEntry.CurrentValues.SetValues(address); } else { profileInStore.Addresses.Add(address); } } } if (profileData.Phones != null && profileData.Phones.Count > 0) { foreach (PhoneNumber number in profileData.Phones) { PhoneNumber lookup = profileInStore.Phones.FirstOrDefault(p => p.Id == number.Id); if (lookup != null) { DbEntityEntry phoneEntry = _dataContext.Entry(lookup); phoneEntry.CurrentValues.SetValues(number); } else { profileInStore.Phones.Add(number); } } } if (profileData.EmailContacts != null && profileData.EmailContacts.Count > 0) { foreach (EmailAddress email in profileData.EmailContacts) { EmailAddress lookup = profileInStore.EmailContacts.FirstOrDefault(p => p.Id == email.Id); if (lookup != null) { DbEntityEntry emailEntry = _dataContext.Entry(lookup); emailEntry.CurrentValues.SetValues(email); } else { profileInStore.EmailContacts.Add(email); } } } _dataContext.SaveChanges(); } catch (Exception ex) { throw new DataProviderException("Error updating profile data", ex); } } return(profile); }