Użycie SaveChanges() w Entity Framework jest bardzo częste, a wywołanie SaveChanges() po pojedynczej modyfikacji lub usunięciu danych zwraca liczbę rekordów wpływu.
Aby użyć modyfikacji wsadowej lub usuwania danych wsadowo, potrzebujesz metody SaveChanges(false)+AcceptAllChanges().
SaveChanges(false) to po prostu powiadomienie, że EF musi wykonać operację na bazie danych, która jest oczekująca w pamięci i może być cofnięta, gdy jest to konieczne, na przykład gdy zatwierdzenie AcceptAllChange() jest naprawdę skuteczne, a EF cofnie operację SaveChanges(false).
W przypadku operacji transakcyjnych rozproszonych konieczne jest korzystanie z TransactionScope do ich obsługi i często piszemy w ten sposób:
Ale pisanie w ten sposób jest ryzykowne, fałszywe Na przykład, kontekst1. SaveChanges() odniósł sukces, context2. SaveChanges() jest problematyczne, jesteśmy w zakresie. Complete() zakończy się po zatwierdzeniu transakcji, a Context1 zostanie pomyślnie wykonany
(W mojej praktyce powyższe można normalnie cofnąć, jeśli kontekst1. SaveChanges() odniósł sukces, context2. SaveChanges() jest problematyczne, żadne z nich nie zostanie pomyślnie wykonane! Odwołaj się do przestrzeni nazw using System.Transaction w swoim projekcie. Definiowanie zakresu transakcji w użyciu jest równoważne określeniu zakresu rzeczy, tzn. zakres tej transakcji jest w obrębie użycia. W przypadku używania lunety, jeśli nie ma lunety. Zakończ polecenie (zakończenie), a scope automatycznie cofnie wszystkie operacje po zniszczeniu. ) To niekoniecznie spełnia nasze potrzeby. Jeśli potrzebujemy, aby kontekst1 i kontekst2 były wykonane jednocześnie lub żaden z nich nie odniósł sukcesu, musimy wprowadzić drobne poprawki w kodzie, na przykład użycie następującego kodu:
Używamy SaveChanges(false), aby najpierw wysłać niezbędne polecenia operacji bazy danych do bazy, co oznacza, że context1 i context2 tak naprawdę się nie zmieniły – jeśli transakcja zostanie zakończona i automatycznie cofnięta, żadna z tych zmian nie zostanie faktycznie zatwierdzona do bazy, więc można ją skutecznie cofnąć.
|