2009-08-18 3 views
0

ich den folgenden Code bin versuchtUnterschall 3 - Der Betrieb ist für den Zustand der Transaktion nicht gültig

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(); 
} 

wenn ich erreichen ud.save() i erhalten die Fehlermeldung ‚Der Vorgang ist nicht gültig für der Status der Transaktion. ---> System.Transactions.TransactionPromotionException: Fehler beim Versuch, die Transaktion zu fördern '

Wenn ich den Transaktionsteil auskommentieren funktioniert es gut, ist nicht .SingleOrDefault trennen von der db?

dank

Antwort

1

Sie benötigen eine Transaction in einem SharedDbConnectionScope wickeln, here für Details. Folgendes sollte für Ihr Beispiel arbeiten

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

, die ein sehr guter Punkt, aber ich habe immer noch das Problem scheint, wie ein Fehler ist Unterschall 3.0 Ich werde dieser Lösung einen Versuch geben http://github.com/subsonic/SubSonic-3.0/issuesearch?state=open&q=SharedDbConnectionScope#issue/69 – freddoo

+0

Erfolg es funktioniert, es ist ein echtes Lebensretter – freddoo

+0

@freddoo Kann auf dem von Ihnen angegebenen Link nichts finden ... –

1

es ist ein Fehler mit Subsonic 3.0.0.3

das Update hier issue 69 gefunden werden kann

Verwandte Themen