9
Robię kaskadowe usuwanie w zdarzeniu wysyłanym z Gridview. Usunięte są w transakcji. Oto uproszczony kod:Błąd wiązania Gridview: "Bieżący TransactionScope jest już gotowy"
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();
}
Wezwanie do sieci za DataBind() metoda nie powiedzie się z tego wyjątku: „Obecny TransactionScope jest już kompletna” Dlaczego?
Oczywiście w tym momencie TransactionScope jest kompletny i powinien. Po usunięciu TransactionScope działa.
dziękuję, to było łatwe. – cdonner
Dzięki. Pomogło to rozwiązać problem, z którym miałem do czynienia. Jednak nie jestem pewien DLACZEGO te problemy występują. – Phil
@Phil: GridView jest wiązany po zatwierdzeniu transakcji, ale nadal znajduje się w zakresie transakcji. Komunikat o błędzie mówi: "Umieściłeś to w transakcji, ale nie mogę jej wykonać, ponieważ już dokonałeś transakcji." Ponieważ transakcja nie jest wymagana do wiązania GridView, sensowne jest odizolowanie go od zakresu transakcji. –