Abfragetags
Abfragetags ermöglichen das Korrelieren zwischen LINQ-Abfragen im Code und generierten SQL-Abfragen, die in Protokollen erfasst werden.
Sie können eine LINQ-Abfrage mithilfe der neuen TagWith()
-Methode kommentieren:
Tipp
Das in diesem Artikel verwendete Beispiel finden Sie auf GitHub.
var myLocation = new Point(1, 2);
var nearestPeople = (from f in context.People.TagWith("This is my spatial query!")
orderby f.Location.Distance(myLocation) descending
select f).Take(5).ToList();
Diese LINQ-Abfrage wird in die folgende SQL-Anweisung übersetzt:
-- This is my spatial query!
SELECT TOP(@__p_1) [p].[Id], [p].[Location]
FROM [People] AS [p]
ORDER BY [p].[Location].STDistance(@__myLocation_0) DESC
TagWith()
kann mehrmals in der gleichen Abfrage aufgerufen werden.
Abfragetags sind kumulativ.
Betrachten Sie beispielsweise die folgenden Methoden:
private static IQueryable<Person> GetNearestPeople(SpatialContext context, Point myLocation)
=> from f in context.People.TagWith("GetNearestPeople")
orderby f.Location.Distance(myLocation) descending
select f;
private static IQueryable<T> Limit<T>(IQueryable<T> source, int limit) => source.TagWith("Limit").Take(limit);
Die folgende Abfrage:
var results = Limit(GetNearestPeople(context, new Point(1, 2)), 25).ToList();
wird übersetzt in
-- GetNearestPeople
-- Limit
SELECT TOP(@__p_1) [p].[Id], [p].[Location]
FROM [People] AS [p]
ORDER BY [p].[Location].STDistance(@__myLocation_0) DESC
Es ist auch möglich, Multi-Linienzeichenfolgen als Abfragetags zu verwenden. Beispiel:
var results = Limit(GetNearestPeople(context, new Point(1, 2)), 25).TagWith(
@"This is a multi-line
string").ToList();
Dies generiert diese SQL-Anweisung:
-- GetNearestPeople
-- Limit
-- This is a multi-line
-- string
SELECT TOP(@__p_1) [p].[Id], [p].[Location]
FROM [People] AS [p]
ORDER BY [p].[Location].STDistance(@__myLocation_0) DESC
Bekannte Einschränkungen
Abfragetags lassen sich nicht parametrisieren. EF Core behandelt Abfragetags in LINQ-Abfragen immer als Zeichenfolgenliterale, die in der generierten SQL-Anweisung enthalten sind. Kompilierte Abfragen, die Abfragetags als Parameter verwenden, sind nicht zulässig.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für