Question

Je sais que le soutien ne marche pas NHibernate transactions imbriquées.

Let s dire que je suis quelque chose comme ceci:

  1. UserService.BeginTransaction (sur la session en cours)
  2. UserService.Save
  3. UserService-> FeedService
    1. FeedService.BeginTransaction (sur la session en cours)
    2. FeedService.Save
    3. FeedService.Commit (sur la transaction retournée dans # 3.1)
  4. UserService-> AddressService
    1. AddressService.BeginTransaction (sur la session en cours)
    2. AddressService.Save
    3. AddressService.Commit (sur la transaction retournée dans # 4.1)
  5. UserService.Commit (sur la transaction retournée dans # 1)

Qu'est-ce qui se passe quand Commit est invoqué dans # 3.3, est la transaction commited? Je dois tout pour réussir ou d'échouer.

Était-ce utile?

La solution

Comme Jamie dit, les transactions devraient être gérées à un niveau supérieur pour éviter cette situation.

Cependant, si vous doit garder begin / commit au niveau « Service » pour une raison quelconque, vous pouvez tout envelopper dans un TransactionScope, que vous Complete() seulement après proprement déroulée de tout.

Autres conseils

Oui. L'appel BeginTransaction en 3.1 ne fera rien parce qu'il ya déjà une transaction active. Si vous voulez toutes vos opérations à participer à la même transaction alors ne pas appeler Begin / End Transaction 3.x et 4.x.

Mon conseil est de ne pas utiliser des transactions en service ou des cours du référentiel. Je contrôle la transaction soit au niveau de l'interface utilisateur ou créer une classe qui encapsule le processus d'affaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top