Я пытаюсь вставить большую коллекцию объектов в таблицу, используя свободный NHibernate, используя вызов для сохранения или обновления, передавая каждый объект из коллекции в цикле foreach. Я устанавливал размер пакета равным размеру коллекции, однако я прочитал в блоге Айенде, что установка больших значений не рекомендуется, поэтому я ограничил его значением 250, однако, когда я просматриваю коллекцию в NHProf, я см. поток операторов вставки (коллекция содержит около 20000 элементов ), а не набор пакетных вызовов вставки.
Это кажется очень неэффективным и занимает гораздо больше времени, чем я ожидал, для очень простого по сути запроса -вставка значения в 25 столбцов (да, это одно место, где это можно было бы сделать лучше, но это устаревшая база данных, с которой я пока застрял )в базе данных SQL Server 2008 -, поэтому я могу только предположить, что делаю это неправильно.
Есть ли рекомендуемый способ вставки больших коллекций сущностей с помощью NHibernate? Можно ли повысить эффективность, используя Save вместо 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();
}
}
Извиняюсь за немного расплывчатый вопрос, у меня такое чувство, что я просто неправильно подхожу к вещам, и любые указатели будут очень признательны!