Using Query Tags in Entity Framework Core: A Simple Guide

Osama HaiDer
2 min readJun 29, 2024

--

In Entity Framework Core, query tags help you link LINQ queries in your code with the generated SQL queries captured in logs. This makes it easier to identify and troubleshoot specific queries. The `TagWith()` method is used to add these tags.

Basic Example

Here’s a simple example to show how `TagWith()` works:

var users = context.Users
.TagWith("Query to get all users")
.ToList();

This LINQ query is tagged with “Query to get all users” and translates to the following SQL statement:

- Query to get all users
SELECT * FROM [Users]

Using Multiple Tags

You can add multiple tags to the same query. Each `TagWith()` call adds a new tag, and these tags are cumulative. Here’s how you can do it:

First Method with Tag

private static IQueryable<User> GetAllUsers(AppDbContext context)
{
return context.Users
.TagWith("Get all users");
}

Second Method with Tag

private static IQueryable<User> LimitUsers(IQueryable<User> query, int limit)
{
return query
.TagWith("Limit results")
.Take(limit);
}

Combining Methods

Now, when we call these methods together:

var limitedUsers = LimitUsers(GetAllUsers(context), 10).ToList();

The query translates to:

- Get all users
- Limit results
SELECT TOP 10 * FROM [Users]

Using Multi-Line Strings as Tags

You can also use multi-line strings for more detailed tags. Here’s an example:

var users = context.Users
.TagWith(@"This is a multi-line
tag for the query")
.ToList();

This produces the following SQL:

- This is a multi-line
- tag for the query
SELECT * FROM [Users]

Known Limitations

- Not Parameterizable: Query tags are always treated as string literals in EF Core. This means you can’t use parameters in your query tags. Compiled queries with query tags as parameters are not allowed.

Conclusion

Using `TagWith()` in Entity Framework Core can make your life easier by helping you trace and debug your LINQ queries through logs. Whether you’re adding a single tag, multiple tags, or even multi-line tags, this feature is simple to use and can greatly enhance your debugging process.

--

--

Osama HaiDer
Osama HaiDer

Written by Osama HaiDer

SSE at TEO International | .Net | Azure | AWS | Web APIs | C#

No responses yet