Я заполняю свою базу данных из онлайн-данных, используя цикл вроде (упрощенный, без проверки ошибок):
foreach (var catalog in catalogs)
{
var result = Items(catalog, state, context);
while (result != null)
{
result.ForEach(r => context.DbContext.Items.Add(r));
context.DbContext.SaveChanges();
result = Items(catalog, state, context);
}
}
Коду требуется некоторое время, чтобы получить XML-ответ от сервера и декодировать его в XElement, используя XElement.Load в потоке ответов. Он декодируется в список элементов, который содержит максимум 50 элементов - это то, что я запрашивал с сервера на каждом проходе цикла. Этот чанк сразу же сохраняется в таблице из-за вызова SaveChanges.
8/10 времени цикла тратится либо на добавление элементов в DbContext, либо на вызов SaveChanges, либо на оба. Связь с удаленным сервером и декодирование ответного XML в список объектов составляют 2/10.
Как повысить эффективность хранения данных в базе данных, оставаясь при этом в EF?
Я знаю, что могу выполнить массовую загрузку базы данных из XML, но это заставит меня выяснить, какие SQL-операторы мне нужно написать, потому что несколько связанных таблиц обновляются с помощью вызова SaveChanges выше, и поэтому я начинаю терять Преимущества использования EF.