我在这里有一个奇怪的。 我正在使用nhibernate,我的问题是在较大的数据插入时没有抛出异常,表中没有数据,但是身份密钥被占用。因此,当我手动插入下一条记录时,身份密钥会跳过一些,就像导入和删除数据一样?!?!
以下是需要考虑的事项: - 我从Web服务中获取数据,因此每个项目都需要一段时间才能被称为make persistent - 根据项目,它可以是插入或更新 - 我正在使用foreach遍历获取的集合,然后检查它是否更新或插入(即我尝试填充实体或创建新实例,然后在最后调用make persistent。) - 代码的工作原理是数据插入较小的批次并在数据库中可见。对于需要稍长时间的导入,它仍然完整,没有任何例外,但没有数据可见,但只有线索是身份密钥已被插入和可见的内容占用。
任何人都可以解释这里发生了什么吗? 由于我没有得到任何例外,我无法诊断这一点,任何帮助或建议都非常感谢!
答案 0 :(得分:0)
我无法想到可能发生的事情。你有SQL分析器吗?如果你这样做,你可以一直重现这个问题,在它发生时运行探查器应该让你知道发生了什么。如果没有,您可以编写插入/删除触发器来跟踪表中发生的事情。
答案 1 :(得分:0)
你的PK生成策略是什么? (知道这可能有助于解释为什么PK被用完了。)在我的头顶,听起来你的交易超时了。一些方法...
答案 2 :(得分:0)
具有IDENTITY的主键和回滚事务将解释缺少的键。它们被插入然后再次删除,因为后来的错误导致了回滚,或者事务超时,正如詹姆斯建议的那样。这是讨论here。
你真正的问题似乎是无声的错误。你是否用空捕获来压制异常?你的捕获物可以抛出它自己的例外吗?如果您还没有,我建议使用简单的文件追加器(接收器)将log4net添加到您的项目中。如果它存在的话,NHibernate写出它对log4net所做的一切(对于调试很有用,但不要在生产中保留它)。或者,如已经建议的那样,您可以分析您的SQL。