Документация:

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

Я рассмотрел написание хранимого процесса, который работает "удалить изимя_таблицы; "для каждой таблицы, которая должна быть очищена. Это должно быть немного быстрее, но было бы неплохо сделать это без выполнения запросов SQL или вызова SP через NH.

Я использую ванильный NHibernate и Linq для NHibernate. Я считаю, что у Castle Active Record есть что-то вроде Foo.DeleteAll (), но я не хочу использовать Active Record для этого проекта.

Есть идеи?

Спасибо / Эрик

ОБНОВИТЬ:

Поскольку этот вопрос был задан и получен ответ, команда NHibernate добилась прогресса. Как объясняет Айенде вэтот блогТеперь вы можете выполнять запросы DML напрямую, без необходимости в NHibernate извлекать какие-либо объекты.

Чтобы удалить все объекты Foo, вы можете сделать так:

using (ISession session = ...)
using (ITransaction transaction = session.BeginTransaction())
{
    session.CreateQuery("delete Foo f").ExecuteUpdate();

    transaction.Commit();
}

Этот запрос будет генерировать следующий SQL:

delete from Foo

что должно быть значительно быстрее, чем сначала извлекать сущности, а затем удалять их. Однако будьте осторожны, поскольку подобные запросы не влияют на кэш 1-го уровня.

Ответы на вопрос(3)

Ваш ответ на вопрос