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.
Journal Log4net généré par mon test. NHibernate enregistre des informations utiles dans le cadre du mode DEBUG. J'utilise MSSQL. –
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é. –