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.
grazie, è stato facile. – cdonner
Grazie. Questo ha aiutato a risolvere un problema che ho dovuto affrontare. Tuttavia, non sono sicuro perché questo problema si verifica. – Phil
@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. –