//NOTE: TODO: RE-Evaulate the use of interfaces here at this layer. It is asking the provider developer to take //certain things on faith. We may want another type of interface or simply commit to the providers that thr framework //will take a specific conrete implmnentation. public override IMemberProfileData CreateMemberProfile(IMemberProfileData profile, Dictionary <String, Object> providerKeys = null) { IMemberProfileData returnProfile = profile; SqlProfile profileData = profile.ToSqlProfile(); profileData.Id = Guid.NewGuid(); if (profileData != null) { try { _dataContext.Profiles.Add(profileData); _dataContext.SaveChanges(); } catch (Exception ex) { throw new DataProviderException("Unable to create member profile", ex); } ((MemberProfileData)returnProfile).Id = profileData.Id; } return(returnProfile); }
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); }