FreeText в EF2.1: метод FreeText не поддерживается, поскольку запрос переключился на оценку клиента

Я пытаюсь выполнить простой полнотекстовый поиск:

var dbquery = _dbContext.Contents
   .Where(c => EF.Functions.FreeText("Content", "a"));

var result = dbQuery.ToList();

но я получаю:

InvalidOperationException: The 'FreeText' method is not supported because the query has switched to client-evaluation. Inspect the log to determine which query expressions are triggering client-evaluation.

Возможно, важно отметить, что я использую наследование:

public class MyDbContext : DbContext
{
    public DbSet<ForumThread> ForumThreads { get; set; }
    public DbSet<ForumPost> ForumPosts { get; set; }

    public DbSet<ContentBase> Contents { get; set; }
 }

public abstract class ContentBase
{
    public Guid Id { get; set; }
    public string Content { get; set; }
}

public class GenericContent : ContentBase
{        
    public virtual string Title { get; set; }
    public virtual ICollection<Tag> Tags { get; set; } = new List<Tag>();
}

public class ForumThread : GenericContent {}

public class ForumPost : ContentBase
{
    public ForumThread Thread { get; set; }
}
EF.Functions.FreeText("Content", "a") ничего не использует в c. Вы имели ввиду EF.Functions.FreeText(c.Content, "a")?
user743382 13.09.2018 10:47

@hvd: ты прав, а как ты узнал? Документация говорит, что это должно быть имя свойства

Liero 13.09.2018 12:14

Хм. Плохая документация. Для меня это просто не имело смысла, я решил, что это должен быть c.Content, и перепроверил его с помощью быстрого поиска в Google. Я бы предложил открыть проблему на их странице проблем GitHub, но похоже, что параметр уже был переименован в propertyReference, что, по крайней мере, немного лучше. Я думаю, вы можете опубликовать объяснение того, почему вы подумали, что это должен быть "Content", на основе текущей документации, и почему оказалось, что это не должно быть, в качестве ответа, если хотите.

user743382 13.09.2018 12:40

В любом случае я приму это как ответ, если вы напишете

Liero 16.09.2018 09:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
1 074
1

Ответы 1

Альтернативный способ:

var dbquery = _dbContext.Contents
    .Where(c => EF.Functions.FreeText(EF.Property<string>(c, "Content"), "a"));

Не могли бы вы объяснить свое решение?

csabinho 21.10.2019 09:35

Решил ту же проблему с EF.Functions.Contains в моем случае. Понятия не имею, почему и как, поскольку документации нет.

DiPi 16.12.2020 18:23

Другие вопросы по теме