Nhibernate 的Session和Asp.net 的線程

來源:互聯網
上載者:User

有個問題困擾了好久:
同樣的程式,有時成功有時失敗,懷疑和ASP的線程有關係
程式:


        public int Deposit(Guid AccountID, string sn)
        {
            decimal balance = 0;
            int useDay = 0;
            string business;
            Account account = 
                (Account)_coreRepository.GetObjectById(typeof(Account),AccountID);
            Guid snId;
            GetSnID(sn,out snId);//調用Hql
            if(ValidateSn(snId,out balance,out useDay,out business) == 0)//用到NH的HQL
            {
                    //省略
                    
                    _coreRepository.UpdateObject(account);
                    SetOperateLog("DepositBySn",balance.ToString(),"","",account);//用到Save
                    return 0;


                }
                
                                
            }
            else
            {
                return ValidateSn(snId,out balance,out useDay,out business);
            }
            
            

        }

_coreRespository的原始碼我的Blog上有,封裝了一些簡單的CRUD操作
以上代碼,昨天突然運行不正常,運行到GetSnID時出錯。可是單獨調用GetSnID能正常運行。懷疑是Session的問題,檢查Corespoitory的封裝,發現他沒有在每次操作中關閉Session而是讓HttpModuel來處理的。
可跟蹤程式發現Session是Open的,因此與Session的OPen,Close 無關
現在改代碼如下:public int Deposit(Guid AccountID, string sn)
        {
            decimal balance = 0;
            int useDay = 0;
            string business;
            Account account = (Account)_coreRepository.GetObjectById(typeof(Account),AccountID);
            Guid snId;
            _coreRepository.CloseSession();
            _coreRepository.OpenSession();

            GetSnID(sn,out snId);
            if(ValidateSn(snId,out balance,out useDay,out business) == 0)
            {
    _coreRepository.CloseSession();
                    _coreRepository.OpenSession();
                    ISession s = _coreRepository.ActiveSession;
                    s.Update(account);
                    s.Close();
                    
                    
                    if(_coreRepository.ActiveSession.IsOpen == false)
                    {
                        _coreRepository.OpenSession();
                    

                    }
                    SetOperateLog("DepositBySn",balance.ToString(),"","",account);
                    //_coreRepository.CloseSession();
                    return 0;

                }

    

            }

能正常運行。
認為問題已經解決。
可是晚上再運行以前出問題的代碼(第一段),竟然又能正常工作了。
因為Session不是安全執行緒的,懷疑和Asp的線程有關。
第二段能解決問題,應該是再每次函數調用中都用到了新的Session,而沒有用舊的。
有高手指教一下??

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.