Wie kann ich das vom Entity Framework generierte SQL anzeigen?
(In meinem speziellen Fall verwende ich den mysql-Anbieter - falls das eine Rolle spielt)
Wie kann ich das vom Entity Framework generierte SQL anzeigen?
(In meinem speziellen Fall verwende ich den mysql-Anbieter - falls das eine Rolle spielt)
Wenn Sie Entity Framework 6 und höher verwenden und die SQL-Ausgabe in Visual Studio anzeigen möchten (wie ich es getan habe), müssen Sie die neue Protokollierungs-/Abfangfunktion verwenden.
Durch Hinzufügen der folgenden Zeile wird das generierte SQL (zusammen mit zusätzlichen ausführungsbezogenen Details) im Ausgabebereich von Visual Studio ausgegeben:
using (MyDatabaseEntities context = new MyDatabaseEntities())
{
context.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);
// query the database using EF here.
}
Weitere Informationen zur Protokollierung in EF6 finden Sie in dieser Blogserie: http://blog.oneunicorn.com/2013/05/08/ef6-sql-logging-part-1-simple-logging/
Hinweis: Stellen Sie sicher, dass Sie Ihr Projekt im DEBUG-Modus ausführen.
Sie können Folgendes tun:
IQueryable query = from x in appEntities
where x.id == 32
select x;
var sql = ((System.Data.Objects.ObjectQuery)query).ToTraceString();
oder in EF6:
var sql = ((System.Data.Entity.Core.Objects.ObjectQuery)query)
.ToTraceString();
oder in EF6.3+:
var sql = ((dynamic)flooringStoresProducts).Sql;
So erhalten Sie das erzeugte SQL.
Ab EF6.1 können Sie Interceptors verwenden, um einen Datenbanklogger zu registrieren. Siehe Kapitel "Interceptors" und "Protokollierung von Datenbankoperationen" in eine Datei aquí
<interceptors>
<interceptor type="System.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFramework">
<parameters>
<parameter value="C:\Temp\LogOutput.txt"/>
<parameter value="true" type="System.Boolean"/>
</parameters>
</interceptor>
</interceptors>
Diese lang ersehnte Funktion ist in EF Core 5.0 verfügbar! Dies ist aus dem Wöchentliche Status-Updates :
var query = context.Set<Customer>().Where(c => c.City == city); Console.WriteLine(query.ToQueryString())
führt bei Verwendung des SQL Server-Datenbankanbieters zu dieser Ausgabe:
DECLARE p0 nvarchar(4000) = N'London'; SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] WHERE [c].[City] = @__city_0
Beachten Sie, dass die Deklarationen für Parameter des richtigen Typs auch in der Ausgabe enthalten sind. Dies ermöglicht das Kopieren/Einfügen in SQL Server Management Studio oder ähnlichen Tools, so dass die Abfrage für Debugging/Analyse ausgeführt werden kann.
Juhu!!!
(Hinweis: Sie benötigen using Microsoft.EntityFrameworkCore;
)
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.