Toutes mes demandes ASP.NET sont enveloppées dans une session et une transaction qui est validée uniquement à la fin de la requête.Vider séparément la transaction Castle ActiveRecord et actualiser l'objet dans une autre transaction
Au cours de l'exécution de la requête, j'aimerais insérer un objet et le rendre visible aux autres threads potentiels, c'est-à-dire diviser l'insertion en une nouvelle transaction, valider cette transaction et continuer.
La raison en est que la requête en question touche une API qui enchaîne alors une autre de mes pages (quasi-synchrone) pour me faire savoir qu'elle a traité, et donc double un enregistrement de transaction, car la requête initiale pas encore terminé, et donc pas commis le dossier de transaction.
J'ai essayé envelopper le code d'insertion avec une nouvelle SessionScope, TransactionScope (TransactionMode.New), combinaison des deux, tout rinçage manuellement, etc.
Cependant, quand je l'appelle Actualiser sur l'objet I » Je reçois toujours l'ancien état d'objet.
Voici quelques exemple de code pour ce que je vois:
Post outsidePost = Post.Find(id); // status of this post is Status.Old
using (TransactionScope transaction = new TransactionScope(TransactionMode.New))
{
Post p = Post.Find(id);
p.Status = Status.New; // new status set here
p.Update();
SessionScope.Current.Flush();
transaction.Flush();
transaction.VoteCommit();
}
outsidePost.Refresh();
// refresh doesn't get the new status, status is still Status.Old
Toutes les suggestions, idées et commentaires sont appréciés!
Merci Marcus, essayé déjà mais malheureusement, il n'a pas fait l'affaire. Je viens de finir par truquer tout ça en dehors d'ActiveRecord. – eanticev