示例#1
0
        //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);
        }
示例#2
0
        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);
        }