2010-09-23 5 views
0

Je suis en difficulté avec TransactionPropagation.NotSupported. Je croyais que cette propagation provoque que le code est exécuté dans aucune transaction. Signifie que lorsque j'ai marqué la méthode spécifique, la transaction en cours sera suspendue et le code sera exécuté sans aucune transaction.Spring.net TransactionPropagation NotSupported

La version actuelle de spring.net crée une nouvelle transaction à la place. Voir le code suivant:

[Test] 
public void A() { 
     TransactionTemplate template = new TransactionTemplate(TransactionManager) { 
      PropagationBehavior = TransactionPropagation.NotSupported 
     }; 
     template.Execute(delegate { 
      Assert.AreEqual(0, 
       SessionFactory.GetCurrentSession().Linq<XXX>(). 
       Where(t => t.Id.Equals(YYY)).ToList().Count); 
      return null; 
     }); 
} 

J'ai espéré que cette notation provoque que la requête linq est exécutée sans transaction et qu'elle lancera la nouvelle exception. Mais le journal a montré qu'il crée automatiquement une nouvelle session et une nouvelle transaction.

J'ai découvert ce problème lorsque j'ai marqué n'importe quelle méthode par l'annotation mentionnée et malgré l'annotation, la requête LINQ à l'intérieur a été correctement exécutée.

La question est: comment puis-je marquer la méthode pour qu'elle n'utilise pas la transaction du tout? Je ne veux pas utiliser la propagation jamais car je veux que la transaction en cours soit suspendue.

Mon projet a le flux de code d'entreprise, il y a la gestion des transactions, et je veux marquer toutes les parties pour être non-transactionnel.

Répondre

1

Vous mentionnez être capable de dire à partir du journal qu'une nouvelle transaction est démarrée. Quel journal, la base de données ou l'application? Quelle base de données utilisez-vous? Certaines bases de données ne vous permet d'exécuter une requête en dehors d'une transaction du tout, donc serait tout simplement commencer une interne pour vous ...


Mise à jour:

Vos questions ressemble à celui-ci:

https://jira.springframework.org/browse/SPRNET-1307?page=com.atlassian.jira.plugin.ext.bamboo%3Abamboo-build-results-tabpanel#issue-tabs

Je vous assurer que vous utilisez la version de Spring.NET qui a ce correctif dans ce (ressemble à v 1.3.1 ou plus?)

En outre, vous pouvez essayer de supprimer manuellement la transaction et voir si cela corrige le comportement:

using(var tx = new TransactionScope(TransactionScopeOption.Suppress)) 
{ 
    // make DB call... 
} 
+0

Journal Log4net généré par mon test. NHibernate enregistre des informations utiles dans le cadre du mode DEBUG. J'utilise MSSQL. –

+0

Merci. J'ai déjà trouvé ce problème, mais je ne savais pas comment définir ou utiliser TransactionScopeOption.Suppress en utilisant spring.net transaction et nhibernate. Je ne sais pas où l'injecter, j'utilise la version spring.net d'hier donc le spring.net contient un comportement réparé. –