Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 23237|Odpowiedź: 1

[Źródło] Masowe przesyłanie i przetwarzanie transakcji w ramach Entity Framework

[Skopiuj link]
Opublikowano 08.04.2017 22:10:01 | | |

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ąć.




Poprzedni:EF6 wykorzystuje Database.BeginTransaction do zarządzania transakcjami
Następny:Tutoriale dotyczące serii tworzenia i użycia EF ORM
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com