Я хочу указать определенный тайм-аут команды (или LOCK_TIMEOUT) для SQL, и как только этот тайм-аут достигнут, в nHibernate должно быть вызвано исключение (или предупреждение).
Ниже приведен пример псевдокода, который я написал:
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-сервере мы использовали для этого следующий SQL:
BEGIN TRAN
SET LOCK_TIMEOUT 500
SELECT * FROM Foo WITH (UPDLOCK, ROWLOCK) WHERE PrimaryKeyID = 1000001
Если строка PrimaryKeyID заблокирована в другой транзакции, SQL Server отображает следующее сообщение об ошибке:
Msg 1222, Level 16, State 51, Line 3
Lock request time out period exceeded
Точно так же я хочу показать информацию о времени блокировки или времени ожидания команды, используя nHibernate. Пожалуйста, помогите мне достичь этого.
Заранее благодарим за помощь.