Ερωτήματα καταγραφής που εκτελούνται από το Entity Framework DbContext

Ερωτήματα καταγραφής που εκτελούνται από το Entity Framework DbContext

Το άρθρο Logging and Intercepting Database Operations στο MSDN είναι αυτό που ψάχνετε.

Το DbContext.Database.Log Η ιδιότητα μπορεί να οριστεί σε πληρεξούσιο για οποιαδήποτε μέθοδο που παίρνει μια συμβολοσειρά. Συνήθως χρησιμοποιείται με οποιοδήποτε TextWriter ρυθμίζοντάς το στη μέθοδο "Write" αυτού του TextWriter. Όλη η SQL που δημιουργείται από το τρέχον περιβάλλον θα καταγραφεί σε αυτό το πρόγραμμα εγγραφής. Για παράδειγμα, ο ακόλουθος κώδικας θα καταγράψει την SQL στην κονσόλα:

using (var context = new BlogContext())
{
    context.Database.Log = Console.Write;

    // Your code here...
}

Μπορείτε να χρησιμοποιήσετε αυτήν τη γραμμή για να καταγράψετε τα ερωτήματα SQL μόνο στο παράθυρο "Έξοδος" του Visual Studio και όχι σε ένα παράθυρο κονσόλας, και πάλι μόνο σε λειτουργία εντοπισμού σφαλμάτων.

public class YourContext : DbContext
{   
    public YourContext()
    {
        Database.Log = sql => Debug.Write(sql);
    }
}

Εάν έχετε εγκατάσταση .NET Core με καταγραφικό, τότε το EF θα καταγράψει τα ερωτήματά του σε όποια έξοδο θέλετε:εντοπισμός σφαλμάτων σε παράθυρο εξόδου, κονσόλα, αρχείο κ.λπ.

Χρειάζεται απλώς να διαμορφώσετε το επίπεδο καταγραφής "Πληροφορίες" στις ρυθμίσεις των εφαρμογών σας. Για παράδειγμα, αυτό έχει καταγραφή EF στο παράθυρο εξόδου εντοπισμού σφαλμάτων:

"Logging": {
  "PathFormat": "Logs/log-{Date}.txt",
  "IncludeScopes": false,
  "Debug": {
    "LogLevel": {
      "Default": "Information",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "Console": {
    "LogLevel": {
      "Default": "Information",
      "System": "Warning",
      "Microsoft": "Warning"
    }
  },
  "File": {
    "LogLevel": {
      "Default": "Information",
      "System": "Warning",
      "Microsoft": "Warning"
    }
  },
  "LogLevel": {
    "Default": "Information",
    "System": "Warning",
    "Microsoft": "Warning"
  }
}