Массовая вставка коллекции сущностей с помощью Fluent NHibernate

Я пытаюсь вставить большую коллекцию объектов в таблицу, используя свободный 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();
    }
}

Извиняюсь за немного расплывчатый вопрос, у меня такое чувство, что я просто неправильно подхожу к вещам, и любые указатели будут очень признательны!

18
задан Ian Cotterill 5 July 2012 в 17:02
поделиться