在查询之前刷新?

我有一个使用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作为单元测试场景,如果这有什么不同。


你说的

根据文档,它应该在运行查询之前刷新以检索所有对象

但该文档位于https://www.hibernate.org/hib_docs/v3/api/org/hibernate/FlushMode.html,该文档指出在AUTO刷新模式下(重点是我的):

会话在查询执行之前有时被刷新以确保查询永不返回陈旧状态。 这是默认的冲洗模式。

所以是的,你需要做一个刷新以保存这些值,然后才能期望它们出现在你的选择中。

链接地址: http://www.djcxy.com/p/23233.html

上一篇: flush before querying?

下一篇: nhibernate should i flush session explicitly after "SaveOrUpdate"?