Я пытаюсь выполнить простой полнотекстовый поиск:
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; }
}
@hvd: ты прав, а как ты узнал? Документация говорит, что это должно быть имя свойства
Хм. Плохая документация. Для меня это просто не имело смысла, я решил, что это должен быть c.Content
, и перепроверил его с помощью быстрого поиска в Google. Я бы предложил открыть проблему на их странице проблем GitHub, но похоже, что параметр уже был переименован в propertyReference
, что, по крайней мере, немного лучше. Я думаю, вы можете опубликовать объяснение того, почему вы подумали, что это должен быть "Content"
, на основе текущей документации, и почему оказалось, что это не должно быть, в качестве ответа, если хотите.
В любом случае я приму это как ответ, если вы напишете
Альтернативный способ:
var dbquery = _dbContext.Contents
.Where(c => EF.Functions.FreeText(EF.Property<string>(c, "Content"), "a"));
Не могли бы вы объяснить свое решение?
Решил ту же проблему с EF.Functions.Contains
в моем случае. Понятия не имею, почему и как, поскольку документации нет.
EF.Functions.FreeText("Content", "a")
ничего не использует вc
. Вы имели ввидуEF.Functions.FreeText(c.Content, "a")
?