我的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或事务提交是什么意思()?我会理解在某处是否存在豁免。
答案 0 :(得分:2)
NHibernate假设所有数据库操作都在事务中完成,因此人们明确地使用它们而不是使用 NHibernate RDBMS隐式使用它们。
Ayende在他的帖子NH Prof Alerts: Use of implicit transactions is discouraged中更详细地解释了这一点。
编辑:今天学到了新的东西。 NHibernate不是使用隐式事务而是使用DB。