2010-03-26 2 views
1

Nous sommes confrontés à un problème très complexe dans notre application de production. Nous avons une méthode WCF qui crée une entité complexe dans la base de données avec toute sa relation. ProcédéComportement étrange du code dans TransactionScope?

public void InsertEntity(Entity entity) 
{ 
    using(TransactionScope scope = new TransactionScope()) 
    { 
     EntityDao.Create(entity); 
    }  
} 
  • EntityDao.Create (personne) est très complexe et comporte de grandes pièces de logique. Au cours de l'ensemble du processus de création, il crée plusieurs entités enfants et a également plusieurs requêtes à la base de données.

  • Lors de la demande de création d'entité de l'ensemble de la WCF, la connexion est généralement maintenue dans une variable ThreadStatic et réutilisée par les DAO. Bien que certaines des requêtes DAO décrites à l'étape 2 utilisent une nouvelle connexion et la ferme après utilisation. Dans l'ensemble, nous avons vu que le comportement du processus ci-dessus est erratique. Certaines requêtes dans le DAO interne ne retourne même pas les données réelles de la base de données? La même requête lors de l'exécution dans le magasin de données actaul donne un résultat correct.

    Quelle peut être la raison possible de ce comportement?

  • Répondre

    0

    ThreadStatic n'est pas recommandé. Utilisez CallContext à la place. J'ai le code à http://code.google.com/p/softwareishardwork/ qui démontre la façon correcte de gérer les connexions d'une manière que vous décrivez (testé dans des scénarios sévères de haute performance). Essayez un cas de test en utilisant ce code.