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