在GenericADOException之后尝试Session.GetAll时,“MyEntityType”条目中的null id(在发生异常后不刷新会话)

时间:2010-02-25 07:41:17

标签: c# .net nhibernate

我使用InnerException.Message =“Unique key violation ...”捕获GenericADOException,用于告知用户输入的登录名已被使用。
之后,我正在尝试获取一些日期(Session.CreateCriteria),我收到此错误: “MyEntityType”条目中的null id(发生异常后不刷新会话)

2 个答案:

答案 0 :(得分:7)

http://www.nhforge.org/doc/nh/en/index.html#manipulatingdata-exceptions

  

如果ISession抛出异常   你应该立即回滚   事务,调用ISession.Close()和   丢弃ISession实例。某些   ISession的方法不会离开   会议处于一致状态。

您是否在异常后丢弃会话并开始新会话?

答案 1 :(得分:2)

您可以从上下文中删除对象,如果您这样做,则继续:

public void Save() {
  try
    {
      Session.SaveOrUpdate(this);
    }
    catch
    {
      // If the object as a null identifier everything else fails. Remove from context
      if (Session.GetIdentifier(this) == null)
        ((SessionImpl)Session).PersistenceContext.EntityEntries.Remove(this);
      throw;
    }
  }