Я пытаюсь вставить большую коллекцию объектов в таблицу, используя беглый NHibernate, используя вызов для сохранения или обновления передачи каждого объекта из коллекции в цикле foreach. Я установил размер партии в размере коллекции, однако я прочитал в блоге Айенде, что настройка его на большие значения не рекомендуется, поэтому я закрыл его на уровне 250, однако, когда я просматриваю коллекцию в NHProf, я см. поток операторов вставки (коллекция составляет около 20000 элементов), а не набор пакетных вызовов вставки.
Это кажется очень неэффективным и занимает гораздо больше времени, чем я ожидал бы от запроса, который является очень простым по сути - вставка значения в 25 столбцов (да, это одно место, это может быть сделано лучше, но это устаревшую базу данных, за которой я застрял) в базу данных SQL Server 2008, поэтому я могу только предположить, что я делаю это неправильно.
Есть ли рекомендуемый способ вставки больших коллекций объектов с использованием NHibernate? Можно ли повысить эффективность при использовании Save over SaveOrUpdate?
Код метода добавления - вызов SetBatchSize - это то, где пакет закрыт до 250 или задан размер коллекции, если он меньше 250:
public void Add(IEnumerable<TEntity> entities)
{
var session = GetCurrentSession();
using (var transaction = session.BeginTransaction())
{
entities = entities.ToList();
session.SetBatchSize(SetBatchSize(entities.Count()));
foreach (var entity in entities)
session.SaveOrUpdate(entity);
transaction.Commit();
}
}
Извиняюсь за слегка расплывчатый вопрос, у меня такое чувство, что я просто приближаюсь к вещам неправильно, и любые указатели будут очень благодарны!