2009-09-17 8 views
9

Sto eseguendo eliminazioni a cascata in un evento inviato da Gridview. Le eliminazioni sono in una transazione. Ecco il codice semplificata:Errore Binding Gridview: "TransactionScope corrente è già completo"

protected void btnDeleteUser_Click(object sender, EventArgs e) 
{ 
    DataContext db; 
    db = new DataContext(); 

    using (TransactionScope ts = new TransactionScope()) 
    { 
     try 
     { 
      //delete some data 
      db.SubmitChanges(); 

      ts.Complete(); 
     } 
     catch (Exception ex) 
     { 
      // handle error 
     } 
     finally 
     { 
      db.Dispose(); 
      BindGridView(); 
     } 
    } 
} 


private void BindGridView() 
{ 
    DataContext db; 

    db = new DataContext(); 

    GridView.DataSource = <my query> 

    GridView.DataBind();  <========Exception 

    db.Dispose(); 
} 

La chiamata a DataBind della griglia() metodo non riesce con questa eccezione: "The TransactionScope corrente è già completa". Perché?

Ovviamente TransactionScope è completo a quel punto e dovrebbe. Quando rimuovo TransactionScope, funziona.

risposta

11

Spostare BindGridView() all'esterno dell'ambito della transazione.

using (TransactionScope ts = new TransactionScope()) 
    { 
     try 
     { 
      //delete some data 
      db.SubmitChanges(); 

      ts.Complete(); 
     } 
     catch (Exception ex) 
     { 
      // handle error 
     } 
     finally 
     { 
      db.Dispose(); 
     } 
    } 
    BindGridView(); 
+0

grazie, è stato facile. – cdonner

+1

Grazie. Questo ha aiutato a risolvere un problema che ho dovuto affrontare. Tuttavia, non sono sicuro perché questo problema si verifica. – Phil

+10

@Phil: GridView viene associato dopo il commit della transazione, ma mentre è ancora nell'ambito della transazione. Il messaggio di errore sta dicendo: "Hai inserito questo nella transazione, ma non riesco a eseguirlo perché hai già eseguito la transazione." Poiché la transazione non è necessaria per associare il GridView, ha senso isolarlo dall'ambito della transazione. –