2009-10-28 3 views
10

Używam TransactionScope do przesyłania danych w Linq do SQL. Moje pytanie brzmi: jeśli użyję wielu SubmitChanges w tym samym zakresie, czy cały zakres zostanie wycofany w przypadku błędu lub po prostu zmian wprowadzonych po ostatnich zmianach SubmitChanges? Na przykład:Wiele zmian SubmitChanges i wycofywanie transakcji przy użyciu Linq do SQL

using (TransactionScope trans = new TransactionScope()) 
{ 
    using (dbDataContext db = new dbDataContext()) 
    { 
     try 
     { 
      //do some insert 
      db.SubmitChanges(); 

      //do some updates 
      db.SubmitChanges(); 

      trans.Complete(); 
     } 
     catch(Exception ex){} 
    } 
} 

Jeśli aktualizacja SubmitChanges zgłasza wyjątek, czy wstawienie zmian SubmitChanges również zostanie wycofane?

+2

Sprawdź to podobne pytanie - http://stackoverflow.com/questions/542525/transactionscope-vs-transaction-in-linq2sql - w szczególności pierwsza odpowiedź –

Odpowiedz

8

WSZYSTKIE zmiany zostaną wycofane, a nie tylko te z ostatnich funkcji SubmitChanges().

Będziesz często musiał używać tego wzorca, gdy masz dane zależne od innych danych - na przykład, jeśli musisz utworzyć obiekt i pobrać jego automatycznie wygenerowany identyfikator, aby zrobić coś innego (chociaż L2SQL obsługuje to z jeden SubmitChanges wywołuje większość scenariuszy po prostu tworząc obiekt, ale dygresja ...).