2008-10-09 63 views
1

我在想,如果這個似乎熟悉的任何經驗NHibernate的開發或正在失敗,如果有人能夠給我一個想法,從哪裏開始,試圖解決這個問題:NHibernate的數據庫連接負載

我繼承了NHibernate的網站使用NHibernate 0.6和.NET遠程處理在ASP.NET 1.1中編寫的駐留在數據庫服務器上的DAL層。我一直在嘗試將其升級到ASP.NET 3.5和NHibernate 1.2.1.4。

我用直接數據庫連接替換了.NET遠程設置,一切正常,直到網站獲得一些負載,然後NHibernate調用開始間歇性地失敗拋出異常:ADOException無法執行查詢,然後是NHibernate生成的SQL聲明。

與誤差給出的堆棧跟蹤是: NHibernate.Loader.Loader.LoadEntity(ISessionImplementor會話,對象ID,ITYPE identifierType,對象optionalObject,類型optionalEntityName,對象optionalIdentifier,IEntityPersister持留)在NHibernate的

。 Loader.Entity.AbstractEntityLoader.Load(ISessionImplementor會議,對象ID,對象optionalObject,對象optionalId)

在NHibernate.Loader.Entity.AbstractEntityLoader.Load(對象ID,對象optionalObject,ISessionImplementor會話)

在NHibernate.Persister.Entity.AbstractEntityPersister.Load(對象ID,對象optionalObject,LockMode lockMode,ISessionImplementor會話)

在NHibernate.Impl.SessionImpl.DoLoad(鍵入theClass描述,對象ID,對象optionalObject,LockMode lockMode,布爾checkDeleted)

在NHibernate.Impl.SessionImpl.DoLoadByClass(類型clazz中,對象ID,布爾checkDeleted,布爾allowProxyCreation)

在NHibernate.Impl.SessionImpl.Load(類型clazz中,對象ID)

謝謝!

回答

1
  • 驗證您的連接設置。
  • 如果可以的話,緩存中的對象,就像你可以避開毆打服務器
  • 確保你有你的表建立索引...這是一個巨大的一個
  • 確保log4net的的日誌記錄被警告/錯誤,所以你不寫一個百科全書日誌
2

問題是非線程安全的nhibernate會話工廠。更改項目使用http模塊爲每個請求使用一個nhibernate會話(並且確保不打開非.as * x文件中的rquests會話),並且一切正常。