2010-05-14 3 views
2

все! Сейчас я изучаю NHibernate, и мне хотелось бы знать, возможно ли сохранить несколько объектов в базе данных за одну операцию.NHibernate: вставить сразу несколько элементов

Для примера рассмотрим этот тестовый код

private static void SaveTestBillNamesInSession(ISession session, params string[] names) 
    { 
     var bills = from name in names 
        select new Bill 
         { 
          Name = name, 
          DateRegistered = DateTime.Now, 
         }; 
     foreach (var bill in bills) 
      session.SaveOrUpdate(bill); 
    } 

Этот цикл здесь генерирует много заявлений INSERT, которые могут быть неоптимальной в SQL Server 2008, который позволяет включать несколько строк данных в одном INSERT заявление.

Можно ли переписать этот код для использования этой функции - вставить все данные за одну операцию?

Обновление ОК, теперь это действительно начало отправлять все в одной партии. Огромное спасибо всем!

+0

Вы имеете в виду «вставку-штуцер»? Это просто синтаксический сахар или он также лучше работает? – Paco

+0

@Paco: он работает лучше, если это единственный запрос против многих независимых INSERT. Если все эти ВСТАВКИ входят в одну партию, то это почти то же самое. – Gart

ответ

7

Есть что-то близкое к тому, что вы хотите.

Если вы установите для свойства конфигурации adonet.batch_size значение, отличное от 0 (по умолчанию), NHibernate отправит сразу несколько операторов SQL Server.

+0

Я согласен с этим ответом, если вы не уверены, что он загружает вставки или нет, посмотрите на www.nhprof.com и используйте инструмент Ayende, чтобы узнать, что NHibernate делает с базой данных под обложками. –

+0

+1 Отличный ответ! Я прочитал всю документацию NHibernate и не помню эту деталь, но что NHibernate не был предназначен для пакетного лечения. Благодаря! знак равно –

Смежные вопросы