A melhor maneira de excluir todas as linhas de uma tabela usando o NHibernate?

Para manter meus testes de integração independentes, removo todos os dados antigos e insiro novos dados antes de cada teste. Existe uma maneira melhor de fazer isso do que simplesmente consultar todas as entidades e excluí-las uma a uma?

Eu considerei escrever um processo armazenado que executa "delete fromNome da tabela; "para cada tabela a ser limpa. Isso deve ser um pouco mais rápido, mas seria bom fazê-lo sem fazer consultas SQL ou chamar SPs via NH.

Estou usando o NHibernate de baunilha e o Linq to NHibernate. Acredito que o Castle Active Record tenha algo como Foo.DeleteAll (), mas não quero usar o Active Record para este projeto.

Alguma ideia?

Obrigado / Erik

ATUALIZAR:

Desde que essa pergunta foi feita e respondida, a equipe do NHibernate fez progressos. Como Ayende explica emesta postagem no blog, agora você pode executar consultas DML diretamente, sem que o NHibernate precise buscar nenhuma entidade.

Para excluir todos os objetos Foo, você pode fazer o seguinte:

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

    transaction.Commit();
}

Esta consulta geraria o seguinte SQL:

delete from Foo

o que deve ser significativamente mais rápido do que buscar as entidades primeiro e depois excluí-las. Tenha cuidado, pois consultas como essas não afetam o cache de nível 1.

questionAnswers(3)

yourAnswerToTheQuestion