私たちが最後の金曜日をリリースしたとき、私は受け入れられないエラーを受け取りました。エラーメッセージは次のとおりです。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サービスを呼び出してPOSTに「測定」を行うとトリガーされます。唯一の違いは、私がテストの際にサービスを呼び出すことであり、生産時に他の会社がウェブサービスに測定値を送信するということです。
セッションやトランザクションの量と関係があるかもしれませんが、エラーメッセージに変数が表示される理由を説明できません。
アイデア?あなたが私にこれを手伝うことができるように、私が提供できる情報がありますか?
編集:InnerExeptionはORMを使用する場合は特にデッドロックは、ハードの問題ことができ解決
{"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'を含む例外の詳細を記録します。 moreがなければ、log4netを追加し、少なくとも警告以上のログを記録するように設定してください。そして、NHibernateは、失敗に関する詳細なログを発行する必要があります。 –
ありがとうございました。私はこれが典型的な間違いか何かを望んでいた。リリース計画(私は月に1回リリースすることができます)に従わなければならないので、デバッグするのはちょっと難しいので、受け入れだけをテストしてください。だから私がlog4netを追加しても、エラーが何であるかを知るには1ヶ月待たなければならない。 – Tjab