当我们在上个星期五发布时,我收到了一个我没有接受的错误。该错误信息是:NHibernate IStatelessSession CreateQuery失败
could not execute update query[SQL: delete from dbo.MyTable where col1=? and col2=? and col3=? and col4=? and col5=?]
我的C#代码如下:
var hqlDelete = "DELETE MyTable m WHERE m.Col1 = :var_1 AND m.Col2 = :var_2 AND m.Col3= :var_3 AND m.Col4 = :var_4 AND m.Col5= :var_5";
var deletedEntities = session.CreateQuery(hqlDelete)
.SetString("var_1", variable1)
.SetString("var_2", variable2)
.SetString("var_3", variable3)
.SetString("var_4", variable4)
.SetString("var_5", variable5)
.ExecuteUpdate();
transaction.Commit();
session.Close();
现在,正如我所说,在接受测试时错误没有触发。另外,当我使用生产数据库(来自我的开发人员座位的代码)进行测试时,它的工作也没有问题。
当我调用Web服务并向其发布“测量”时,会触发该代码。唯一的区别是我在测试时调用服务,在生产时另一家公司将测量结果发送到Web服务。
我认为这可能与会话/事务的数量有关,但这并不能解释为什么变量在错误消息中显示为?
。
任何想法?有更多的信息可以提供,所以你可以帮助我解决这个问题吗?
编辑:InnerExeption是
{"Transaction (Process ID 68) was deadlocked on lock | communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction."}
首先,显示完整的异常堆栈..上面的那部分将只是一个开始...真实和有趣的信息将遵循... –
正如Radim所指出的,您的错误信息不足。它只是告诉它不能做什么。通常它有一些原因。记录异常的详细信息,包括其“InnerException”。如果您没有更多,请添加log4net,将其配置为至少记录警告和更高级别,然后NHibernate应该发布关于失败的详细日志。 –
好的谢谢。我希望这是一些典型的错误或什么。调试很难,因为我必须遵循一个发布计划(我可以每个月发布一次),因此只能接受测试。所以即使添加log4net,我也要等一个月才能看到错误。 – Tjab