2010-03-26 93 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/它演示了正确的方式来处理你描述的方式连接(严重高性能场景测试)。尝试使用此代码的测试用例。