Je veux avoir quelque chose comme des sous-transactions, en ce que vous pouvez marquer un point où vous commencerez la sous-transaction, puis au point de descection pour ce bit, vous pouvez annuler (annuler le sous-bit) ou continuer, en s'engageant efficacement, lorsque la trans mission sort. Bien sûr, si vous annulez la transaction externe, le bit marqué est également abandonné.Comment gérer des sous-transactions ou des transactions imbriquées?
Comment puis-je faire avec NHibernate, mais la transaction est fermée pendant la fisrt commettras et i`m ayant ainsi le message d'erreur
aucune transaction ouverte à commettre
Mon code est comme suit:
API.Data.Session session = API.Data.SessionManager.GetSession();
session.BeginTransaction();
try
{
Project project = Project.Load(ID);
...........
Save(project);
.....................
session.CommitTransaction();
}
catch
{
session.RollbackTransaction();
throw;
}
public void save(Project project)
{
Data.SessionManager.GetSession().BeginTransaction();
try
{
Save();
LogIssueChange(test);
Data.SessionManager.GetSession().CommitTransaction();
}
catch
{
Data.SessionManager.GetSession().RollbackTransaction();
throw;
}
}
N'y a-t-il pas d'autre méthode? Je ne veux pas interagir directement avec la base de données – learning
Non, il n'y a pas d'autre moyen. Je ne mets pas du tout les transactions dans les méthodes de référentiel/service avec NHibernate afin que plusieurs méthodes de référentiel puissent participer à la même transaction. Il y a très rarement un besoin de transactions imbriquées en dehors des systèmes distribués. J'ai une méthode d'extension pour ISession appelée DeferableTransaction qui utilise une sémantique similaire et permet à une transaction de reporter à une transaction existante ou de commencer une nouvelle transaction. Je l'afficherai si vous êtes intéressé. –
ne peut pas parler pour le PO, mais je serais intéressé à voir votre impl – DanP