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

Widok: 27156|Odpowiedź: 2

[Źródło] EF DbContext gwarantuje, że kontekst jest unikalny

[Skopiuj link]
Opublikowano 22.08.2020 10:21:31 | | |
Używając EF do manipulacji bazą danych, wyodrębniania DbContext (klasy kontekstu operacji bazy danych) w tym samym zażądaniu HTTP w celu zapewnienia unikalności, artykuł wykorzystuje dwa schematy zapewniające unikalność kontekstu Entity Framework, a rozwiązanie na platformie .NET Core jest dołączone.

Opcja 1

Jeśli obiekt jest gwarantowany globalnie unikalny, na pewno pomyślisz o klasycznym wzorcu projektowym: tryb singleton, jeśli użyty obiekt musi być unikalny w wątku?

Slot danych: CallContext, ok, zobacz wyjaśnienie callcontentu w msdn.

CallContext to dedykowany obiekt kolekcji, podobny do lokalnego magazynu wątków dla wywołań metod, zapewniający slot danych unikalny dla każdego logicznego wątku wykonawczego. Sloty danych nie są współdzielone między kontekstami wywołań w innych wątkach logicznych. Obiekty mogą być dodawane do CallContext, gdy ten propaguje się tam i z powrotem wzdłuż ścieżki kodu wykonania i jest kontrolowany przez poszczególne obiekty na tej ścieżce.

Oznacza to, że bieżący wątek przechowuje obiekt w lokalnej pamięci pamięci wątku, a obiekt jest niszczony wraz z niszczeniem.

Użyj kodu:



Scenariusze użycia: Osobiście uważam, że jest używana, gdy obiekt musi być używany globalnie w wątku, a inne wątki rozszerzenia pakietu wątków nie mają do niego dostępu. Na przykład w kontekście danych EF dla każdego żądania zostanie wygenerowany wątek, a w tym momencie utworzony zostanie obiekt kontekstu danych, z którego różne funkcje mogą korzystać i ostatecznie zatwierdzać się razem, aby uniknąć problemów z transakcjami. Oczywiście niektórzy mogą zapytać mnie, czy mogę stworzyć zmienną do użycia, która również może osiągnąć ten sam cel, ale ten obiekt może też oddziaływać z innymi danymi wątków, co stoi w sprzeczności z koncepcją bycia unikalnym w wątku.

Opcja 2

Scenariusz opiera się na żądaniach web http, ponieważ każde żądanie to nowy wątek, a kod wygląda następująco:



Korzystanie z "CallContext" w .NET Core

Wiemy, że CallContext nie jest już dostępny dla . NETStandard lub .NET Core.

Możesz jednak użyć Asynclocal<T>, aby naśladować CallContext, wystarczy utworzyć następującą klasę statyczną:



Przestrzenie nazw, do których należy się odwoływać:



Jest też łatwy w użyciu (tutaj umieściłem CallContext w bibliotece Common):





Poprzedni:ASP.NET MVC5 jest wydany w trybie prekompilowanym, poprawiając szybkość ładowania stron i wydajność
Następny:[Skręć]. NET eksportuje PPT jako obraz
Opublikowano 25.08.2020 23:38:22 |
Czy nie pachnie po infuzji?
 Ziemianin| Opublikowano 26.08.2020 21:37:39 |
Cucumber Opublikowano 2020-8-25 23:38
Czy nie pachnie po infuzji?

Domyślny cykl życia zastrzyku asp.net rdzenia nie spełnia moich potrzeb

Instancje usług utworzone przez obiekt Singleton: IServiceProvider są przechowywane na obiekcie IServiceProvider jako kontener główny, więc wiele obiektów IServiceProvider o tym samym korzeniu dla tego samego typu instancji usług znajduje się na tym samym obiekcie.
Instancje usług utworzone przez obiekt Scoped:IServiceProvider są zapisywane samodzielnie, więc instancje usług tego samego typu dostarczone przez ten sam obiekt IServiceProvider są tym samym obiektem.
Przejściowe: Dla każdego żądania świadczenia usługi obiekt IServiceProvider zawsze tworzy nową instancję usługi.
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