Свободное сохранение в пакетном режиме - PullRequest
0 голосов
/ 08 ноября 2011

У меня есть XML-файл, который я читаю и обновляю существующие записи в базе данных.

Я прочитал xml в список объектов c # и перебрал их, найдя соответствующую запись в базе данных и обновив ее по значениям xml / c #.

Затем я сохраняю этот объект - но есть ли какой-нибудь способ в беглом nihibernate добавить объект в список (может быть 1000 записей) и сохранить bacth

Суть в том, что это производительность, которую я чувствую - я использую дозвуковые 2 и 3, и я выбрал дозвуковую 2, поскольку это было намного быстрее - но мне было просто интересно узнать о том, как использовать беглый nhibernate - примеры и т. Д.

1 Ответ

0 голосов
/ 08 ноября 2011

сеанс имеет кеш, который вы хотите.если в конфигурации фабрики сеансов включен пакетный режим, то следующие обновления будут пакетно обновляться

using (var tx = session.BeginTransaction())
{
    const int BATCH_SIZE = 1000;
    IList<MyObjects> myobjects = ReadInXML();
    Dictionary<int, MyObjects> batch = new Dictionary<int, MyObjects>(BATCH_SIZE);
    for (int i = 0; i < myobjects.Count; i++)
    {
        batch.Add(myobjects[i].Id, myobjects[i]);
        if (batch.Count < BATCH_SIZE)
            continue;

        var entities = session.QueryOver<MyEntity>()
            .WhereRestrictionOn(x => x.Id).IsIn(batch.Keys)
            .List();

        foreach (var entity in entities)
        {
            Update(entity, batch[entity.Id]);
        }

        // the session knows all entities it has loaded, no need for session.Update();
        session.Flush();
        // remove all processed entities from the session cache to speed up things
        session.Clear();
        // prepare for next batch
        batch.Clear();
    }

    tx.Commit();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...