Estoy haciendo eliminaciones en cascada en un evento enviado desde un Gridview. Los borrados están en una transacción. Aquí está el código simplificado:Cuadrícula de enlace de error: "El TransactionScope actual ya está 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 llamada a DataBind de la red() método falla con esta excepción: "El TransactionScope actual ya está completa." ¿Por qué?
Por supuesto, es el TransactionScope completo en ese punto, y debería. Cuando elimino TransactionScope, funciona.
gracias, eso fue fácil. – cdonner
Gracias. Esto ayudó a resolver un problema que enfrenté. Sin embargo, no estoy seguro de por qué ocurre este problema. – Phil
@Phil: El GridView se enlaza después de que se haya confirmado la transacción, pero mientras aún está dentro del alcance de la transacción. El mensaje de error dice: "Pones esto dentro de la transacción, pero no puedo ejecutarlo porque ya has comprometido la transacción". Como la transacción no es necesaria para vincular GridView, tiene sentido aislarla del alcance de la transacción. –