예제 #1
0
        public static void GenMemberPhoneNumbers(Guid id)
        {
            using (var ctx = new RT2020Entities())
            {
                ctx.Configuration.LazyLoadingEnabled = false;

                #region Generate random phone numbers for each Member
                var mbrAddresses = ctx.MemberAddress.Where(x => x.PhoneTag1Value != "" || x.PhoneTag2Value != "").ToList();
                var counts       = mbrAddresses.Count();
                if (counts > 0)
                {
                    var ccodes   = new CountryCodes();
                    var codelist = ccodes.GetList();

                    //using (var scope = ctx.Database.BeginTransaction())
                    //{
                    try
                    {
                        //List<String> uniqueCountries = new List<string>();
                        int i = 0;
                        foreach (var item in mbrAddresses)
                        {
                            #region 用 random gen phone number 取代原有嘅 phone number

                            /** 假設條件(address 先決):
                             * 0. 冇地址,當 others
                             * 1. 非 ASCII 地址就係中國
                             * 2. 由 Address 找到所屬 Country,分為:中國﹑香港﹑其他
                             * 3. 如果 match 唔倒,當係 香港
                             */
                            String currentCountry = "", number1 = "", number2 = "", number3 = "", number4 = "", number5 = "";

                            currentCountry = (String.IsNullOrEmpty(item.Address)) ?
                                             "" :
                                             IsChinese(item.Address) ? "china" : StripCountry(item.Address); // 非 ASCII 地址就係中國
                            if (currentCountry != String.Empty)
                            {
                                #region  地址
                                currentCountry = currentCountry.ToLower().Replace(".", "");

                                var isoCountry = ccodes.FindByDisplayName(currentCountry); // 由 Address 找到所屬 Country
                                var found      = isoCountry != null ? true : false;
                                if (!found)                                                // match 唔倒,當係 香港
                                {
                                    currentCountry = "hong kong";
                                    isoCountry     = ccodes.FindByISO3166_Alpha3("HKG"); //! 應該加埋:FindByISO3166_Alpha2,可惜 :(
                                }
                                else
                                {
                                    currentCountry = isoCountry.CLDR_displayname.ToLower();
                                }

                                var dboCountry = ctx.Country.Where(x => x.CountryCode == isoCountry.FIPS).FirstOrDefault();

                                #region get random Phone Numbers into: number1 number2
                                switch (isoCountry.FIPS)
                                {
                                case "CN":
                                    number1 = (item.PhoneTag1Value.Trim() != String.Empty) ? GetRandomPhoneNumber_CN() : "";
                                    number2 = (item.PhoneTag2Value.Trim() != String.Empty) ? GetRandomPhoneNumber_CN() : "";
                                    number3 = (item.PhoneTag3Value.Trim() != String.Empty) ? GetRandomPhoneNumber_CN() : "";
                                    number4 = (item.PhoneTag4Value.Trim() != String.Empty) ? GetRandomPhoneNumber_CN() : "";
                                    number5 = (item.PhoneTag5Value.Trim() != String.Empty) ? GetRandomPhoneNumber_CN() : "";
                                    break;

                                case "HK":
                                    number1 = (item.PhoneTag1Value.Trim() != String.Empty) ? GetRandomPhoneNumber_HK() : "";
                                    number2 = (item.PhoneTag2Value.Trim() != String.Empty) ? GetRandomPhoneNumber_HK() : "";
                                    number3 = (item.PhoneTag3Value.Trim() != String.Empty) ? GetRandomPhoneNumber_HK() : "";
                                    number4 = (item.PhoneTag4Value.Trim() != String.Empty) ? GetRandomPhoneNumber_HK() : "";
                                    number5 = (item.PhoneTag5Value.Trim() != String.Empty) ? GetRandomPhoneNumber_HK() : "";
                                    break;

                                default:
                                    number1 = (item.PhoneTag1Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";
                                    number2 = (item.PhoneTag2Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";
                                    number3 = (item.PhoneTag3Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";
                                    number4 = (item.PhoneTag4Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";
                                    number5 = (item.PhoneTag5Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";
                                    break;
                                }
                                #endregion

                                if (dboCountry != null)
                                {
                                    item.CountryId = dboCountry.CountryId;
                                }
                                item.PhoneTag1Value = number1;
                                item.PhoneTag2Value = number2;
                                item.PhoneTag3Value = number3;
                                item.PhoneTag4Value = number4;
                                item.PhoneTag5Value = number5;

                                /** Code used in debugging
                                 * var inList = uniqueCountries.Where(x => x == currentCountry).FirstOrDefault();
                                 * if (inList == null) uniqueCountries.Add(currentCountry);
                                 */
                                #endregion
                            }
                            else
                            {
                                #region 冇地址
                                number1 = (item.PhoneTag1Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";
                                number2 = (item.PhoneTag2Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";
                                number3 = (item.PhoneTag3Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";
                                number4 = (item.PhoneTag4Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";
                                number5 = (item.PhoneTag5Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";

                                item.PhoneTag1Value = number1;
                                item.PhoneTag2Value = number2;
                                item.PhoneTag3Value = number3;
                                item.PhoneTag4Value = number4;
                                item.PhoneTag5Value = number5;
                                #endregion
                            }

                            //ctx.BulkSaveChanges(options => options.BatchSize = 100);
                            #endregion

                            i++;
                            #region SaveChanges each batch: say 100
                            if ((i % 100) == 0)
                            {
                                ctx.BulkSaveChanges();

                                // uncomment for debugging
                                //if (i >= 50) break;
                            }
                            #endregion
                        }

                        if (ctx.ChangeTracker.HasChanges())
                        {
                            ctx.BulkSaveChanges();
                        }
                        //scope.Commit();
                    }
                    catch (Exception ex)
                    {
                        //scope.Rollback();
                        throw ex;
                    }
                    //}
                }
                #endregion
            }
        }