2013-07-21 53 views
2

在我的代碼中,我使用NHibernate ISession.BeginTransaction(IsolationLevel.ReadCommitted)開始事務。我正在使用Firebird 2.5。有時在多用戶環境中發生死鎖。它是預期的。問題是如果我直接使用Firebird的.NET提供程序,我可以設置死鎖WAIT超時或使用NO WAIT選項,但是我使用NHibernate並且一個星期現在無法找到方法來執行此操作。任何幫助,意見和提示?當使用NHibernate時,是否可以爲事務設置Firebird WAIT超時

+0

檢查這個問題的答案[SO](http://stackoverflow.com/questions/4130000/setting-the-right-transaction-isolation-mode-with-nhibernate-how-to)。它給你一個關於如何設置事務隔離級別的提示。 –

+0

感謝您的評論。但問題不在IsolationLevel中。在你給他的鏈接中,他最有可能使用快照隔離,這就是他得到異常的原因。我的問題是,我使用ReadCommitted隔離和發生死鎖,我的代碼無限等待完成。因此,我需要找到一種方法來告訴Firebird .NET提供程序等待超時,或將其配置爲使用NO WAIT選項(即立即給出異常而不是等待) – bamanow

+0

不知道如何設置NO WAIT,但是您是否嘗試過配置超時使用'Icriteria'的細節?檢查此[接受的答案](http://stackoverflow.com/questions/8102647/nhibernate-setting-query-time-out-period-for-commands-and-pessimistic-locking) –

回答

0

從這個很老link你可以做這些:通過調用public FbTransaction BeginTransaction(IsolationLevel)

  • 調整事務選項更精確地使用這種BeginTransaction超載

    1. 使用預定義的隔離級別:public FbTransaction BeginTransaction(FbTransactionOptions)

    所以可能你應該使用第二個選項來設置no_wait參數。 但是,您可能需要更新版本的文檔,或者您可能有問題like this guy。也許看看Jiří Činčura's blog

  • 相關問題