2009-08-18 3 views
0

J'essaie le code suivantsubsonique 3 - L'opération est valable pour l'état de la transaction

UserDetail ud = UserDetail.SingleOrDefault(u => u.UserName == CurrentUserName); 
    if (ud == null) 
    ud = new UserDetail(); 

Address uAddress = ud.AddressId.HasValue 
        ? Address.SingleOrNew(a => a.Id == ud.AddressId) 
        : new Address(); 

using (TransactionScope tc = new TransactionScope()) 
{ 
    uAddress.Save(); 
    ud.AddressId = uAddress.Id; 
    ud.Save(); // error is here 
    tc.Complete(); 
} 

quand j'atteins ud.save() je reçois l'erreur « L'opération est valable pour l'état de la transaction. ---> System.Transactions.TransactionPromotionException: Échec lors de la tentative de promotion de la transaction '

Si je commente la partie transaction, cela fonctionne correctement, n'est-ce pas .SingleOrDefault se déconnecte de la base de données?

grâce

Répondre

1

Vous devez envelopper votre TransactionScope dans un SharedDbConnectionScope, voir here pour plus de détails. Ce qui suit devrait fonctionner pour votre exemple

using (SharedDbConnectionScope sharedConnectionScope = new SharedDbConnectionScope()){ 
{ 
    using (TransactionScope tc = new TransactionScope()) 
    { 
    uAddress.Save(); 
    ud.AddressId = uAddress.Id; 
    ud.Save(); // error is here 
    tc.Complete(); 
    } 
} 
+0

qui est un très bon point, mais il me reste le problème semble un bug est subsonique 3.0 je vais essayer cette solution http://github.com/subsonic/SubSonic-3.0/issuesearch?state=open&q=SharedDbConnectionScope#issue/69 – freddoo

+0

le succès ça marche, c'est un véritable sauveur – freddoo

+0

@freddoo Impossible de trouver quoi que ce soit sur ce lien que vous avez fourni ... –

1

c'est un bug avec subsonique 3.0.0.3

le correctif est disponible ici issue 69

Questions connexes