SQLに特定のコマンドタイムアウト(またはLOCK_TIMEOUT)を指定し、このタイムアウトに達するとnHibernateで例外(またはアラート)を発生させる必要があります。
次は私が書いたものを例擬似コードです:PrimaryKeyID行は他にロックされていた場合はコマンドと悲観的なロックのNhibernate設定クエリのタイムアウト時間
BEGIN TRAN
SET LOCK_TIMEOUT 500
SELECT * FROM Foo WITH (UPDLOCK, ROWLOCK) WHERE PrimaryKeyID = 1000001
:我々は次のSQLを使用して、これを達成するために使用されるSQL Serverで
using (var session = sessionFactory.OpenSession()) {
using (var sqlTrans = session.BeginTransaction()) {
ICriteria criteria = session.CreateCriteria(typeof(Foo));
criteria.SetTimeout(5); //Here is the specified command timout, eg: property SqlCommand.CommandTimeout
Foo fooObject = session.Load<Foo>(primaryKeyIntegerValue, LockMode.Force);
session.SaveOrUpdate(fooObject);
sqlTrans.Commit();
}
}
をSQL Serverによって次のエラーメッセージが表示されています。
Msg 1222, Level 16, State 51, Line 3
Lock request time out period exceeded
同様に、ロックタイムアウトまたはコマンドnHibernateを使用して情報をタイムアウトさせます。これを達成するために私を助けてください。
ご協力いただきありがとうございます。
あなたのC#コードは、指定された5秒のタイムアウトを有します。 – mjwills