2011-09-01 2 views
0

Привет всем. У меня есть следующий бит кода, который используется для создания телефонных номеров и вставки их в таблицу в базе данных. Чтобы сгенерировать коды, он выглядит в таблице в базе данных, чтобы увидеть, какие цифры цифр «F» нужно генерировать для диапазона. Так, например, для диапазона Лидса «01132 21» нужны числа, генерирующие для 1,3,4 и 6. Таким образом, сгенерированные числа будут такими, как 01132211000-01132211999, 01132213000-01132213999 и т. Д.Более эффективный и быстрый способ генерации чисел и вставки в db

Это работает как i как ожидалось. Тем не менее, это занимает довольно много времени (требуется 12 часов для создания 120 000 записей, и я считаю, что у нас может быть примерно один миллион записей. Просто интересно, есть ли более быстрый способ делать то, что я хочу. Я все еще очень " зеленый»разработчик, так что действительно не знаю, что лучший способ сделать что-то совсем еще

private TelephoneNumberManagementEntities context = new TelephoneNumberManagementEntities(); 

public ActionResult Index() 
{ 
    var list = context.TempNumberImports.ToList(); 
    foreach (var item in list) 
    { 
     string range = item.Range.ToString().Trim().Replace(" ",""); 

     if (item.C0 == "Y") 
     { 
      GenerateNumbers(range, 0, 999, item.ID); 
     } 
     if (item.C1 == "Y") 
     { 
      GenerateNumbers(range, 1000, 1999, item.ID); 
     } 
     if (item.C2 == "Y") 
     { 
      GenerateNumbers(range, 2000, 2999, item.ID); 
     } 
     if (item.C3 == "Y") 
     { 
      GenerateNumbers(range, 3000, 3999, item.ID); 
     } 
     if (item.C4 == "Y") 
     { 
      GenerateNumbers(range, 4000, 4999, item.ID); 
     } 
     if (item.C5 == "Y") 
     { 
      GenerateNumbers(range, 5000, 5999, item.ID); 
     } 
     if (item.C6 == "Y") 
     { 
      GenerateNumbers(range, 6000, 6999, item.ID); 
     } 
     if (item.C7 == "Y") 
     { 
      GenerateNumbers(range, 7000, 7999, item.ID); 
     } 
     if (item.C8 == "Y") 
     { 
      GenerateNumbers(range, 8000, 8999, item.ID); 
     } 
     if (item.C9 == "Y") 
     { 
      GenerateNumbers(range, 9000, 9999, item.ID); 
     } 
    } 
    return View(); 
} 

public void GenerateNumbers(string range, int startNo, int endNo, int rangeID) 
{ 
    Number num = new Number(); 
    for (int i = startNo; i <= endNo; i++) 
    { 
     if (startNo == 0) 
     { 
      string tempNum = range + i.ToString("D4"); 
      var record = context.Numbers.FirstOrDefault(m => m.Number1 == tempNum); 
      if (record == null) 
      { 
       num.Number1 = tempNum; 
       num.RangeID = rangeID; 
       num.StatusID = 1; 
       num.ImportDate = DateTime.Now; 
       num.ImportSource = "Number Ranges 250811.xlsx"; 
       context.Numbers.Add(num); 
       context.SaveChanges(); 
      } 
     } 
     else 
     { 
      string tempNum = range + i; 
      var record = context.Numbers.FirstOrDefault(m => m.Number1 == tempNum); 
      if (record == null) 
      { 
       num.Number1 = tempNum; 
       num.RangeID = rangeID; 
       num.StatusID = 1; 
       num.ImportDate = DateTime.Now; 
       num.ImportSource = "Number Ranges 250811.xlsx"; 
       context.Numbers.Add(num); 
       context.SaveChanges(); 
      } 
     } 
    } 
} 

ответ

1

Простой ответ: USE хранимая процедура

Ваше текущее решение будет производить тысячи базы данных туда и обратно, потому что каждый номер будет должны быть вставлены в отдельный запрос к базе данных.

Вы также можете рассмотреть возможность подготовки данных как пакетных и использовать SqlBulkCopy.

Смежные вопросы