Omówienie rejestrowania i przechwytywania
Program Entity Framework Core (EF Core) zawiera kilka mechanizmów generowania dzienników, reagowania na zdarzenia i uzyskiwania diagnostyki. Każdy z nich jest dostosowany do różnych sytuacji i ważne jest, aby wybrać najlepszy mechanizm dla danego zadania, nawet wtedy, gdy mogłoby się sprawdzić wiele mechanizmów. Na przykład do rejestrowania kodu SQL może być używany interceptor bazy danych, ale jest to lepiej obsługiwane przez jeden z mechanizmów dostosowanych do rejestrowania. Na tej stronie przedstawiono omówienie każdego z tych mechanizmów i opisano, kiedy należy ich używać.
Krótki przewodnik
Poniższa tabela zawiera szybkie zestawienie różnic między opisanymi tutaj mechanizmami.
Mechanizm | Async | Scope | Zarejestrowano | Przeznaczenie |
---|---|---|---|---|
Rejestrowanie proste | Nie. | Na kontekst | Konfiguracja kontekstu | Rejestrowanie w czasie programowania |
Microsoft.Extensions.Logging | Nie. | Na kontekst* | Wstrzykiwanie zależności lub konfiguracja kontekstu | Rejestrowanie produkcyjne |
Wydarzenia | Nie. | Na kontekst | Dowolny czas | Reagowanie na zdarzenia EF |
Interceptory | Tak | Na kontekst | Konfiguracja kontekstu | Manipulowanie operacjami EF |
Odbiorniki diagnostyczne | Nie. | Przetwórz | Globalnie | Diagnostyka aplikacji |
*Zazwyczaj mechanizm Microsoft.Extensions.Logging
jest konfigurowany dla poszczególnych aplikacji za pośrednictwem wstrzykiwania zależności. Jednak na poziomie programu EF w razie potrzeby można skonfigurować każdy kontekst za pomocą innego rejestratora.
Rejestrowanie proste
Dostęp do dzienników programu EF Core można uzyskać z dowolnego typu aplikacji przy użyciu polecenia LogTo podczas konfigurowania wystąpienia obiektu DbContext. Ta konfiguracja jest często wykonywana w ramach przesłonięcia elementu DbContext.OnConfiguring. Przykład:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.LogTo(Console.WriteLine);
Ta koncepcja jest podobna do elementu Database.Log w programie EF6.
Aby uzyskać więcej informacji, zobacz Rejestrowanie proste.
Microsoft.Extensions.Logging
Microsoft.Extensions.Logging to rozszerzalny mechanizm rejestrowania z dostawcami wtyczek dla wielu typowych systemów rejestrowania. Program EF Core w pełni integruje się z mechanizmem Microsoft.Extensions.Logging
i ta forma rejestrowania jest używana domyślnie w przypadku aplikacji platformy ASP.NET Core.
Aby uzyskać więcej informacji, zobacz Używanie mechanizmu Microsoft.Extensions.Logging w programie EF Core.
Wydarzenia
Program EF Core uwidacznia zdarzenia platformy .NET, które działają jako wywołania zwrotne w razie wystąpienia pewnych zdarzeń w kodzie programu EF Core. Zdarzenia są prostsze niż interceptory i umożliwiają bardziej elastyczną rejestrację. Jednak są one tylko do synchronizacji, dlatego nie mogą wykonywać nieblokujących asynchronicznych operacji we/wy.
Zdarzenia są rejestrowane dla poszczególnych wystąpień obiektu DbContext i tę rejestrację można wykonać w dowolnym momencie. Użyj odbiornika diagnostycznego, aby uzyskać te same informacje ale dla wszystkich wystąpień obiektu DbContext w procesie.
Aby uzyskać więcej informacji, zobacz Zdarzenia platformy .NET w programie EF Core.
Przechwytywanie
Interceptory programu EF Core umożliwiają przechwytywanie, modyfikowanie i/lub pomijanie operacji programu EF Core. Obejmuje to operacje bazy danych niskiego poziomu, takie jak wykonywanie polecenia, a także operacje wyższego poziomu, takie jak wywołania do funkcji SaveChanges.
Interceptory różnią się od rejestrowania i diagnostyki tym, że umożliwiają modyfikowanie lub pomijanie przechwyconej operacji. Rejestrowanie proste lub Microsoft.Extensions.Logging to lepsze opcje do wyboru na potrzeby rejestrowania.
Interceptory są rejestrowane dla poszczególnych wystąpień obiektu DbContext podczas konfigurowania kontekstu. Użyj odbiornika diagnostycznego, aby uzyskać te same informacje ale dla wszystkich wystąpień obiektu DbContext w procesie.
Aby uzyskać więcej informacji, zobacz Przechwytywanie.
Odbiorniki diagnostyczne
Odbiorniki diagnostyczne umożliwiają nasłuchiwanie dowolnego zdarzenia programu EF Core, które występuje w bieżącym procesie platformy .NET.
Odbiorniki diagnostyczne nie są odpowiednie do pobierania zdarzeń z pojedynczego wystąpienia obiektu DbContext. Interceptory programu EF Core zapewniają dostęp do tych samych zdarzeń przy rejestracji dla poszczególnych kontekstów.
Odbiorniki diagnostyczne nie są przeznaczone do rejestrowania. Rejestrowanie proste lub Microsoft.Extensions.Logging to lepsze opcje do wyboru na potrzeby rejestrowania.
Aby uzyskać więcej informacji, zobacz Używanie odbiorników diagnostycznych w programie EF Core.