2017-01-23 15 views
0

Я запускаю консольное приложение для создания или обновления записей в TableB путем записи всех записей (приблизительно 250000 записей) в TableA. Но я хочу знать, как продолжить, если мое консольное приложение не сработало между ... Что произошло дважды до сих пор, и я продолжаю снимать записи и запускаться снова.Консольное приложение для массового создания или обновления записей

Не могли бы вы предложить мне, как я продолжу запуск консольного приложения из того места, где я ушел, если у меня есть GUID записи, где мой процесс завершился неудачно.

+0

Какова ваша настойчивость хранения? Используете ли вы ORM для достижения такого поведения? Пожалуйста, поделитесь некоторым кодом. Ответ, вероятно, будет - DB зафиксировать в кусках (скажем, 100 записей) - но мы не сможем помочь вам с конкретным кодом, если вы не поделитесь своим. – nikovn

+0

Вы знаете о try/catch, правильно? – mason

+0

Ну. Я пишу это на CRM-столе. Но концепция правильная – Kittu

ответ

0

Сохранить Guid мигрировавших объектов в файл или другое хранилище. Затем отфильтруйте данные из таблицы A и перенесите только сбойные объекты.

Это псевдокод:

var dataFromTableA = GetDataFromTableA(); 
var importedObjectGuids = GetImportedObjectsGuidFormFile(); 

var filterdData = new List<your_object>(); 
foreach(var data in dataFromTableA) 
{ 
    if (importedObjectGuids.Contains(data.Guid)) continue; 

    filterdData.Add(data); 
} 

foreach (var data in filterdData) 
{ 
    try 
    { 
     Migrate(data); 
     SaveMigrationResult(data.Guid); 
    } 
    catch (Exception ex) 
    { Console.WriteLine(ex.ToString); 
    } 
} 
+0

Спасибо - @Markeli. Это дало некоторую идею идти вперед и фактически я пишу в таблицу базы данных CRM, но концепция такая же. Я постараюсь это сделать. Большое спасибо за ваши материалы. – Kittu

0

Лучший способ решить эту проблему - не сбой или восстановление после ошибки.

Если вы не отслеживаете свой прогресс, вы можете просто написать GUID, который вы сейчас работаете, в файл.

File.WriteAllText("tmp.txt", GUID.ToString()); 

После этого вы можете прочитать GUID из этого файла.

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

https://msdn.microsoft.com/en-us/library/bb397750(v=vs.110).aspx

+0

Привет, SirBirne, Спасибо за ваш ответ. Я могу написать GUID для временного файла, и теперь я хочу знать, как я могу продолжить, с чего процесс завершился неудачно. Я посмотрел на ссылку, но это не подсказывает мне. Пожалуйста, предложите – Kittu

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