Чтобы мои тесты интеграции были независимыми, я удаляю все старые данные и вставляю новые тестовые данные перед каждым тестом. Есть ли лучший способ сделать это, чем просто запрашивать все объекты и удалять их по одному?
Я рассмотрел запись сохраненного proc, который запускает "delete from tablename"; для каждой таблицы, которая должна быть очищена. Это должно быть довольно быстро, но было бы неплохо сделать это без выполнения SQL-запросов или вызова SP через NH.
Я использую vanilla NHibernate и Linq для NHibernate. Я верю Замок Active Record имеет что-то вроде Foo.DeleteAll(), но я не хочу использовать Active Record для этого проекта.
Любые идеи?
Спасибо/Erik
UPDATE:
Поскольку этот вопрос был задан и дан ответ, прогресс был достигнут командой 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.