发生异常后不要刷新会话

时间:2011-03-28 12:49:57

标签: c# nhibernate

NHibernateSessionManager.Instance.GetSessionFrom(SessionFactoryConfigPath).Flush();

我得到了

null id in FoodOrder.Core.Entities.Articles entry (don't flush the Session after an exception occurs)

我可以使用try catch和session.Close或在这个例子中做什么更好?

例如

public void CommitChanges()
        {
            if (NHibernateSessionManager.Instance.HasOpenTransactionOn(SessionFactoryConfigPath))
            {
                NHibernateSessionManager.Instance.CommitTransactionOn(SessionFactoryConfigPath);
            }
            else
            {
                try
                {
                    // If there's no transaction, just flush the changes
                    NHibernateSessionManager.Instance.GetSessionFrom(SessionFactoryConfigPath).Flush();
                }
                finally
                {
                    NHibernateSessionManager.Instance.GetSessionFrom(SessionFactoryConfigPath).Close();
                }
            }
        }

1 个答案:

答案 0 :(得分:7)

异常后,您的会话处于无效状态,应该处理掉。这是您应该始终在事务中执行写入的一个原因。如果没有,您不知道数据库的状态。所以我建议:

  1. 您没有明确刷新并始终坚持在事务中完成数据访问(读取和写入)。
  2. 如果那不是一个选项,我会鼓励你找到异常的根本原因 - 听起来你有一个实体映射了一个从未设置过的指定id - 并修复了它。
  3. 如果那不是一个选项,那么在发生异常时处理会话。
  4. 希望有所帮助。