0

ASP.NET C# アプリケーションで SqlServer 2008 を使用して NHibernate 3.3.3 を使用しています。

DetachedCriteria _pageCriteria = CriteriaTransformer.Clone(criteria)
            .SetMaxResults(maxResult)
            .SetFirstResult(firstResult);

_recordCount= _countCriteria.GetExecutableCriteria(session).FutureValue<int>();

var _pageCriteriaFuture = _pageCriteria.GetExecutableCriteria(session).Future<T>();

_pageCriteriaFuture.ToList();

前のコードを実行しようとすると、TimeOut エラーが発生します。

Failed to execute multi criteria[SQL: 

SELECT count(*) as y0_ FROM Articoli this_ WHERE ((contains(this_.Oggetto, ?) or contains(this_.CorpoPlaintext, ?) or contains(this_.ParoleChiavi, ?) or contains(this_.SottoTitoloPlainText, ?)));

SELECT TOP (?)  this_.Id as Id13_0_, this_.Corpo as Corpo13_0_, this_.CorpoPlaintext as CorpoPla3_13_0_, this_.Data as Data13_0_, this_.DataInserimento as DataInse5_13_0_, this_.LinkPagina as LinkPagina13_0_, this_.Numero as Numero13_0_, this_.Oggetto as Oggetto13_0_, this_.Tag as Tag13_0_, this_.NumeroVisualizzazioni as NumeroV10_13_0_, this_.IsConsigliatoRedazione as IsConsi11_13_0_, this_.ParoleChiavi as ParoleC12_13_0_, this_.SottoTitolo as SottoTi13_13_0_, this_.SottoTitoloPlainText as SottoTi14_13_0_, this_.idArticoloOld as idArtic15_13_0_, this_.IdUser as IdUser13_0_ 
FROM Articoli this_ WHERE ((contains(this_.Oggetto, ?) or contains(this_.CorpoPlaintext, ?) or contains(this_.ParoleChiavi, ?) or contains(this_.SottoTitoloPlainText, ?))) ORDER BY this_.DataInserimento desc;

]

Inner exception:
{"Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding."}

ポイントは、これらの手順を個別に実行しようとすると、次のようになることです。

_recordCount= _countCriteria.GetExecutableCriteria(session).FutureValue<int>().Value;

それはシャルムのように機能します!!

同じステートメントでそれらを実行しようとすると、なぜこのエラーが発生するのですか?

ロックの問題ですか?MSS 管理スタジオでも同じ 2 つのクエリ コマンドを実行しようとしましたが、エラーは発生しません。

4

1 に答える 1

1

原則として、あなたが使用した Future クエリは私のために働いています。質問を再現しようとしたときだけでなく、日常的にも。

私は同じ例外を経験しました。2つのセッションが開かれたことが原因でした。トランザクションで実行されている最初のものは、更新/挿入でテーブルをロックしていました-コミットされていません。2 番目は結果 (Future) を求めていましたが、タイムアウトで停止しました。同じリクエストですべて(恐ろしい)

注:スニペットから(簡単なドラフトになる可能性があることはわかっていますが、念のため、コピーペーストです)、命名規則についてはわかりません(criteria外部スコープからのもので_recordCountあり、DAOクラスのメンバーであり、 「var _pageCriteriaFuture」は、接頭辞が付いている間は明らかにローカル変数であるため、_初期_countCriteria化せずにスニペットに表示されます...

つまり、各部分が分離されており、それらの一部がすでに他のセッションの開始/終了をトリガーしている可能性があります。したがって、log4net と NHIberante の完全なログ記録をオンにして、トランザクションがいつ開かれたかを確認することをお勧めします。答えがあるかもしれません。

于 2013-06-06T03:50:15.397 に答える