NHibernate - ITransaction.Commit真的有必要吗?

Gui*_*Gui 2 nhibernate

我刚刚开始研究NHibernate 2天前,我正在寻找一个基于教程编写的CRUD方法.我的插入方法是:

        using (ISession session = Contexto.OpenSession())
        using (ITransaction transaction = session.BeginTransaction())
        {
            session.Save(noticia);
            transaction.Commit();
            session.Close();
        }
Run Code Online (Sandbox Code Playgroud)

完整的"Contexto"代码在这里:http://codepaste.net/mrnoo5

我的问题是:我真的需要使用ITransaction transaction = session.BeginTransaction()transaction.Commit();

我问这个是因为我已经测试过运行没有这两行的网络应用程序,并且我已成功插入新记录.

如果可能的话,有人可以解释一下Itransaction的目的和方法提交吗?

谢谢

Die*_*hon 9

这是适当的通用NHibernate使用模式:

using (ISession session = sessionFactory.OpenSession())
using (ITransaction transaction = session.BeginTransaction())
{
    //Do the work here
    transaction.Commit();
}
Run Code Online (Sandbox Code Playgroud)

所有这些都是确保一切按预期工作所必需的(除非您使用其他基础设施)

除了提交之外,关闭会话或对事务执行任何操作都是多余的,因为Dispose会话和事务的方法负责清理,包括在出现错误时进行回滚.

需要注意的是,在异常导致意外行为后,不要对会话执行任何操作,这是限制块内显式异常处理的另一个原因.