Esempio n. 1
0
        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);
        }
Esempio n. 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);
        }