2010-03-26 104 views
1

我們在生產應用中面臨着一個非常複雜的問題。TransactionScope中的代碼奇怪的行爲?

  1. 我們有一個WCF方法,它在數據庫中創建一個具有所有關係的複雜實體。

    public void InsertEntity(Entity entity) 
    { 
        using(TransactionScope scope = new TransactionScope()) 
        { 
         EntityDao.Create(entity); 
        }  
    } 
    
  2. EntityDao.Create(entity)方法非常複雜,並且有大量的邏輯。在整個創建過程中,它創建了多個子實體,並對數據庫也有多個查詢。

  3. 在實體創建的整個WCF請求通常連接被保持在ThreadStatic變量和由DAO的重複使用。儘管步驟2中描述的DAO中的一些查詢使用新連接並在使用後關閉它。

總的來說,我們已經看到上述過程行爲是不穩定的。內部DAO中的一些查詢甚至不會從數據庫返回實際數據?運行到actaul數據存儲時的相同查詢會提供正確的結果。

是一個什麼的這種行爲可能原因是什麼?不建議

回答

0

ThreadStatic。改用CallContext。我有一些代碼在http://code.google.com/p/softwareishardwork/它演示了正確的方式來處理你描述的方式連接(嚴重高性能場景測試)。嘗試使用此代碼的測試用例。