NHibernate Get()后跟Flush或Commit?

时间:2011-04-15 14:26:38

标签: nhibernate transactions unit-of-work flush

我的ISession对象的FlushMode是FlushMode.Commit。

我使用此处定义的工作单元和存储库模式: http://nhforge.org/wikis/patternsandpractices/nhibernate-and-the-unit-of-work-pattern.aspx

我记得看过一些例子,其中一些人紧接着调用Get()后跟Flush或事务提交。我们只是摆脱他们的摇杆,还是有理由这样做?

从我的测试:

    [TestMethod]
    public void TestMethod1()
    {
        Employee e;

        IRepository<Employee> empRepo;
        using(UnitOfWork.Start(Enums.Databases.MyDatabase))
        {
            empRepo = new Repository<Employee>();
            e = empRepo.GetByID(21);
        }

        Debug.WriteLine(e.UserName);
    }

我的GetByID存储库函数只调用Session.Get(id),我可以在输出窗口中查看用户名(在会话被杀之后)......所以在Get之后的任何类型的Flush或事务提交是什么意思()?我会理解在某处是否存在豁免。

1 个答案:

答案 0 :(得分:2)

NHibernate假设所有数据库操作都在事务中完成,因此人们明确地使用它们而不是使用 NHibernate RDBMS隐式使用它们。

Ayende在他的帖子NH Prof Alerts: Use of implicit transactions is discouraged中更详细地解释了这一点。

编辑:今天学到了新的东西。 NHibernate不是使用隐式事务而是使用DB。