在NHibernate中删除失败后,错误“无法执行批处理命令。[SQL:SQL不可用]”

时间:2013-07-13 09:28:15

标签: sql nhibernate

删除与其他记录相关的实体后,由于约束而出现以下错误:

  

语句DELETE与约束...& c。

冲突

我使用以下代码管理此错误:

    Using transazione As ITransaction = sessione.BeginTransaction
        Try
            sessione.Delete(entity)
            transazione.Commit()
            Return True
        Catch ex As Exception
            transazione.Rollback()
            Return False
        End Try
    End Using

如果我再次尝试执行UPDATE语句,即使我不再执行DELETE语句,也会再次发生同样的错误。

有人可以帮我理解我哪里出错吗?

2 个答案:

答案 0 :(得分:2)

请阅读NHibernate reference's chapter on exception handling,特别是第二段:

  

如果ISession抛出异常,则应立即回滚事务,调用ISession.Close()并丢弃ISession实例。某些ISession方法不会使会话保持一致状态。

当您调用Delete()时,您将注册该对象以进行删除。发生异常时,并不意味着会话突然忘记了删除对象的请求。此外,对Rollback()的调用主要向数据库发出ROLLBACK语句 - 它不会将加载的对象恢复到事务开始之前的状态。

通过在回滚事务后保持会话,您可能会在以后的事务中承担在第一次事务中提交某些更改的风险。

答案 1 :(得分:1)

在引用的实体上是否有关于删除主实体的级联规则?

通常,我正在使用Hibernate for Spring Framework,但指导方针是相同的。