Существует множество статей, в которых показано, как получить SQL, сгенерированный EF, включая значения параметров в выражении LINQ. Например, вот один: https://www.stevefenton.co.uk/2015/07/getting-the-sql-query-from-an-entity-framework-iqueryable/. Проблема в том, что ни один из них не возвращает значения параметров, которые будут добавлены в запрос фильтрами Dynamin (https://entityframework-dynamicfilters.net/). Давайте посмотрим на пример.
Мы определили класс контекста БД для доступа к базе данных и создали Dynami c Фильтр:
public class MyContext : DbContext
{
public virtual DbSet<User> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Filter("ExcludeDeletedUsers", (User u) => u.IsDeleted, false);
}
... the rest of the class ...
}
У нас есть функция, которая возвращает всех пользователей с a укажите имя:
public List<User> GetByFirstName(string firstName)
{
return _myContext.Users.Where(u => u.FirstName == firstName).ToList();
}
На сервере MS SQL вышеуказанное приведет к запросу с двумя параметрами: @p__linq__0
и @DynamicFilterParam_000001
. Первому будет присвоено значение firstName
, а второму - 0
. Как я могу получить значение @DynamicFilterParam_000001
при отладке в Visual Studio (не в журналах, не в SQL Profiler)?