Ошибка привязки Gridview: «Текущий TransactionScope уже завершен» - PullRequest
12 голосов
/ 17 сентября 2009

Я делаю каскадные удаления в событии, отправленном из Gridview. Удаленные находятся в транзакции. Вот упрощенный код:

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

Вызов метода DataBind () сетки завершается с этим исключением: «Текущий TransactionScope уже завершен». Почему?

Конечно, TransactionScope завершен на этом этапе, и он должен. Когда я удаляю TransactionScope, он работает.

1 Ответ

14 голосов
/ 17 сентября 2009

Переместить BindGridView () за пределы области транзакции.

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

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