Muszę być całą moją aplikacją transakcyjną na każde przetwarzane przez nią żądanie internetowe.W jaki sposób mogę utworzyć bezpieczną transakcję na żądanie internetowe w MVC .net?
Potrzebuję transakcji, aby rozpocząć, a jeśli nie było żadnych wyjątków w kontrolerach, zatwierdź ją. W przeciwnym razie cofnij.
tej pory mam następujący realizacji:
- pierwszy, utworzyć transakcję na kontrolerze jako zależność.
- Następnie robię mój kontroler/usługę/repozytoria/inne rzeczy pracujące.
- I wreszcie główna abstrakcyjna klasa kontrolera wykonuje swoją metodę
OnActionExecuted
, w której albo ją zatwierdzam, albo nie.
Tu idzie listę technologii, które używam:
- MVC 4
- Ninject
- Automapper
- wzór Obsługi
Teraz, czego chcę wiedzieć, co z zakleszczenia? Co się stanie, gdy dwa żądania sieciowe zostaną przetworzone, a ponadto uzyskają prawo do pracy z dwoma repozytoriami (które są powiązane z ich instancjami), a co oznacza, dwiema tabelami w bazie danych?
Na przykład: jeden wniosek na początku chce czytać stół Table1
a następnie Table2
, w międzyczasie druga prośba chce pracować z Table2
a następnie Table1
.
Co należy zrobić?
Będę odpowiadać jako komentarz, ponieważ zakres mojej odpowiedzi (i myślę, że twoje pytania) wymaga znacznie więcej niż odpowiedzi na WR. IMO musisz oddzielić obawy związane z prezentacją od "domeny" (lub logiki biznesowej). Taka architektura daje dwie zalety: a) zdolność do aranżowania wykonania poszczególnych pod-składników logicznych i ich udziału (lub nie) w transakcji kontrolowanej przez MS, oraz b) infrastrukturę kodu, która znacznie lepiej nadaje się do implementacji jakiejś formy niestandardowej transakcji lub w kolejce, jeśli nieszablonowe narzędzia i najlepsze praktyki są niewystarczające ze względu na specyfikę Twojej aplikacji –