Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Entity Framework Core (EF Core) innehåller flera mekanismer för att generera loggar, svara på händelser och hämta diagnostik. Var och en av dessa är skräddarsydda för olika situationer, och det är viktigt att välja den bästa mekanismen för uppgiften i handen, även när flera mekanismer kan fungera. Till exempel kan en databasavlyssnare användas för att logga SQL, men detta hanteras bättre av en av de mekanismer som är skräddarsydda för loggning. Den här sidan visar en översikt över var och en av dessa mekanismer och beskriver när var och en ska användas.
Snabbreferens
Tabellen nedan innehåller en snabbreferens för skillnaderna mellan de mekanismer som beskrivs här.
| Mekanism | Asynkron | Scope | Registrerat | Avsedd användning |
|---|---|---|---|---|
| Enkel loggning | No | Per kontext | Kontextkonfiguration | Loggning under utvecklingstiden |
| Microsoft.Extensions.Logging | No | Per kontext* | D.I. eller kontextkonfiguration | Produktionsloggning |
| Events | No | Per kontext | När som helst | Reagera på EF-händelser |
| Interceptors | Ja | Per kontext | Kontextkonfiguration | Manipulering av EF-operationer |
| Diagnostiklyssnare | No | Bearbeta | Globalt | Programdiagnostik |
*Konfigureras vanligtvis Microsoft.Extensions.Logging per program via beroendeinmatning. Men på EF-nivå kan varje kontext konfigureras med en annan loggare om det behövs.
Enkel loggning
EF Core-loggar kan nås från alla typer av program med hjälp av LogTo när du konfigurerar en DbContext-instans. Den här konfigurationen görs ofta i en åsidosättning av DbContext.OnConfiguring. Som exempel:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.LogTo(Console.WriteLine);
Det här konceptet liknar Database.Log i EF6.
Mer information finns i Enkel loggning .
Microsoft.Extensions.Logging
Microsoft.Extensions.Logging är en utökningsbar loggningsmekanism med plugin-leverantörer för många vanliga loggningssystem. EF Core integreras fullständigt med Microsoft.Extensions.Logging och den här typen av loggning används som standard för ASP.NET Core-program.
För mer information, se att använda Microsoft.Extensions.Logging i EF Core.
Events
EF Core exponerar .NET-händelser för att fungera som återanrop när vissa saker händer i EF Core-koden. Händelser är enklare än interceptorer och möjliggör en mer flexibel registrering. De är dock endast synkroniserade och kan därför inte utföra icke-blockerande asynkrona I/O.
Händelser registreras per DbContext-instans och den här registreringen kan göras när som helst. Använd en diagnostiklyssnare för att få samma information men för alla DbContext-instanser i processen.
Mer information finns i .NET-händelser i EF Core .
Avlyssning
EF Core-avlyssningsanordningar möjliggör avlyssning, ändring och/eller undertryckning av EF Core-åtgärder. Detta omfattar databasåtgärder på låg nivå, till exempel körning av ett kommando, samt åtgärder på högre nivå, till exempel anrop till SaveChanges.
Interceptorer skiljer sig från loggning och diagnostik eftersom de tillåter ändring eller undertryckning av åtgärden som fångas upp. Enkel loggning eller Microsoft.Extensions.Logging är bättre val för loggning.
Interceptorer registreras per DbContext-instans när kontexten har konfigurerats. Använd en diagnostiklyssnare för att få samma information men för alla DbContext-instanser i processen.
Mer information finns i Avlyssning .
Diagnostiklyssnare
Diagnostiklyssnare tillåter att du lyssnar efter alla EF Core-händelser som inträffar i den aktuella .NET-processen.
Diagnostiklyssnare är inte lämpliga för att hämta händelser från en enda DbContext-instans. EF Core-avlyssningsappar ger åtkomst till samma händelser med registrering per kontext.
Diagnostiklyssnare är inte utformade för loggning. Enkel loggning eller Microsoft.Extensions.Logging är bättre val för loggning.
Mer information finns i Använda diagnostiklyssnare i EF Core .