Entity Framework - Transakcja
We wszystkich wersjach Entity Framework, za każdym razem, gdy wykonujesz SaveChanges()aby wstawić, zaktualizować lub usunąć bazę danych, platforma otoczy tę operację transakcją. Po wywołaniu SaveChanges kontekst automatycznie rozpoczyna transakcję i zatwierdza ją lub wycofuje w zależności od tego, czy utrwalenie powiodło się.
- To wszystko jest dla ciebie przejrzyste i nigdy nie będziesz musiał sobie z tym radzić. 
- Ta transakcja trwa tylko wystarczająco długo, aby wykonać operację, a następnie zostaje zakończona. 
- Kiedy wykonasz kolejną taką operację, rozpocznie się nowa transakcja. 
Entity Framework 6 zapewnia następujące -
Database.BeginTransaction ()
- Jest to prosta i łatwiejsza metoda w ramach istniejącego DbContext do uruchamiania i kończenia transakcji dla użytkowników. 
- Umożliwia połączenie kilku operacji w ramach tej samej transakcji, a zatem wszystkie są zatwierdzane lub wszystkie są wycofywane jako jedna. 
- Umożliwia również użytkownikowi łatwiejsze określenie poziomu izolacji transakcji. 
Database.UseTransaction ()
- Pozwala DbContext na użycie transakcji, która została uruchomiona poza Entity Framework. 
Przyjrzyjmy się poniższemu przykładowi, w którym wiele operacji jest wykonywanych w jednej transakcji. Kod jest następujący -
class Program {
   static void Main(string[] args) {
      using (var context = new UniContextEntities()) {
         using (var dbContextTransaction = context.Database.BeginTransaction()) {
            try {
               Student student = new Student() {
                  ID = 200, 
                  FirstMidName = "Ali", 
                  LastName = "Khan", 
                  EnrollmentDate = DateTime.Parse("2015-12-1")
               };
               context.Students.Add(student);
               context.Database.ExecuteSqlCommand(@"UPDATE Course SET Title = 
                  'Calculus'" + "WHERE CourseID = 1045");
               var query = context.Courses.Where(c ⇒ c.CourseID == 1045);
               foreach (var item in query) {
                  Console.WriteLine(item.CourseID.ToString()
                     + " " + item.Title + " " + item.Credits);
               }
               context.SaveChanges();
               var query1 = context.Students.Where(s ⇒ s.ID == 200);
               foreach (var item in query1) {
                  Console.WriteLine(item.ID.ToString() 
                     + " " + item.FirstMidName + " " + item.LastName);
               }
               dbContextTransaction.Commit();
            } catch (Exception) {
               dbContextTransaction.Rollback();
            }
         }
      }
   }
}- Rozpoczęcie transakcji wymaga, aby podstawowe połączenie ze sklepem było otwarte. 
- Dlatego wywołanie Database.BeginTransaction () otworzy połączenie, jeśli nie zostało jeszcze otwarte. 
- Jeśli DbContextTransaction otworzy połączenie, zamknie je po wywołaniu metody Dispose ().