EF 6 - logowanie zapytań SQL za pomocą Database.Log

0

Witam.
Kolejne babole wychodzą w moim używaniu EF. W dokumentacji Microsoft - Rejestrowanie i przechwytywanie operacji bazy danych jest napisane, że mogę śledzić zapytania do bazy za pomocą Database.Log. Problem w tym, że VS mi to jakoś dziwnie podkreśla i nigdzie nie chce działać.

_dbContext.Database.Log = Console.Write;

Dostaje Cannot assign to 'Log' because it is a 'method group'

Na stacku poczytałem, że można to zrobić w kontekście, wtedy wszystkie dane będą logowane, ale dzieje się to samo i chce się kompilować

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
  Database.Log = Console.Write;
}

ZRZUTKI - intelisense nie pokazuje w ogóle Log.

database_log_intelisense.png
database_log_error.png

Dokumentacja MS jest źle? Brakuje mi jakiejś referencji?

0

A tak Ci nie zadziała?

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.LogTo(Console.WriteLine);
}

Próbowałem użyć przykładu z MSDN i też mi nie działa przypisanie do Log.

0

Program się kompiluje z twoim przykładem, ale nie pokazuje nic w konsoli.

0

Link dokumentacji, który podałeś dotyczy EF6.

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.LogTo(Console.WriteLine);
    base.OnConfiguring(optionsBuilder);
}

Skoro taki kod Ci się kompiluje to znaczy, że używasz EF Core i to działa.
Jeśli używasz Visual Studio to logowania nie szukaj w oknie Output->Debug tylko dla Output->ASP.NET Core Web Server
screenshot-20220805182928.png

0

No ale EF6 to nie jest na nuget EF Core tylko w najnowszej wersji (6.07)?
EntityFramework - .NET Core 3.0, .NET Standard 2.1, .NET Framework 4.0
Microsoft.EntityFrameworkCore - .NET 6.0

Więc jak to jest w końcu? Kolejna rzecz, której Microsoft nie potrafi numerować żeby było wiadomo jak używać?

1

No wiesz, EF6 (czyli ten pierwszy) jest z 2012/13 roku. Od tamtej pory widocznie nie robili tak dużych zmian, żeby podnieść numerek major w wersji. I dlatego jest znany jako EF6.
Natomiast aktualnie mamy .NET 6. Takie paczki jak EF Core, DI itp. są również rozwijane razem z .NET'em i dzielą tą samą cyfrę major. Razem z .NET 7 wyjdzie też EF7 i będzie mniej zamieszania :)

Po prostu zrobili 10 lat temu Entity Framework 6.0.0 i raczej nie wiedzieli, że dopiero teraz się ogarną z numerowaniem swoich technologii jak na numerowanie przystało.

0

No, ale wszystko wskazuje na to, że EF6 to nie to samo co EF Core, a EF Core jest tylko pod .NET 6 więc dlaczego nazywa się EF6, a nie zwyczajnie EF? 🤣
Myślałem, że tylko w .NET są cyferki popie... A tu się okazuje, że Microsoft nawet EF nie potrafi odpowiednio nazwać...

0

Taką przyjęli nomenklaturę i tak wszyscy nazywali paczkę od wielu, wielu lat. A jak stworzyli coś nowego to zaczęli numerować to od początku.
Nie zdziw się jak z nowego EF Core pozbędą się słowa Core, tak samo jak z .NET Core przeszli na NET. 5, potem na NET. 6 itd. i niedługo będziesz musiał wpisywać EF7, żeby dowiedzieć się czegoś o najnowszej wersji tej paczki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1