NHibernate - очистить перед запросом? - PullRequest
1 голос
/ 21 января 2010

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

[Test]
public void NHibernate_BaseRepositoryProvidesRequiredMethods()
{            
    using (var unitOfWork = UnitOfWork.Create())
    {
        // test the add method
        TestRepo.Add(new TestObject() { Id = 1, Name = "Testerson" });
        TestRepo.Add(new TestObject() { Id = 2, Name = "Testerson2" });
        TestRepo.Add(new TestObject() { Id = 3, Name = "Testerson3" });

        // test the getall method
        var objects = TestRepo.GetAll();
        Assert.AreEqual(3, objects.Length);

        // test the remove method
        TestRepo.Remove(objects[1]);
        objects = TestRepo.GetAll();
        Assert.AreEqual(2, objects.Length);

        // test the get method
        var obj = TestRepo.Get(objects[1].Id);
        Assert.AreSame(objects[1], obj);
    }
}

Проблема в том, что линия

Assert.AreEqual(3, objects.Length);

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

Редактировать: я использую Sqlite для сценария модульного тестирования, если это имеет какое-либо значение.

1 Ответ

3 голосов
/ 25 января 2010

Вы заявляете, что

в соответствии с документацией перед запуском запроса для получения всех объектов он должен сбрасываться

Но документ на https://www.hibernate.org/hib_docs/v3/api/org/hibernate/FlushMode.html, документ гласит, что в режиме AUTO flush (выделено мое):

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

Так что да, вам нужно сделать сброс, чтобы сохранить эти значения, прежде чем ожидать, что они появятся в вашем списке выбора.

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