【问题标题】:How to use FreeText in EF core 2.1如何在 EF core 2.1 中使用 FreeText
【发布时间】:2018-12-05 10:45:29
【问题描述】:

我看到 Entity Framework core 2.1 有一个新功能可以使用FREETEXT,但我不知道如何使用它,因为我在网上找不到示例。

https://github.com/aspnet/EntityFrameworkCore/issues/11484

有没有人用过它,可以给我一个简单的例子吗?

【问题讨论】:

标签: c# entity-framework entity-framework-core freetext


【解决方案1】:

首先确保你已经安装了相关的包Microsoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.SqlServer

然后确保您有以下导入:

using Microsoft.EntityFrameworkCore;

现在您可以像这样使用FREETEXT SQL 函数:

var results = context.Foos
    .Where(f => EF.Functions.FreeText(f.ColumnName, "search text"));

注意:您可以在单元测试中看到它是如何工作的,for example

要创建全文索引,目前在 Entity Framework Core 中不支持自动执行此操作。相反,您需要手动将代码添加到迁移中。所以,像往常一样创建一个迁移,打开它并添加类似这样的行:

Sql("CREATE FULLTEXT CATALOG ft AS DEFAULT", true);
Sql("CREATE FULLTEXT INDEX ON dbo.TableName(ColumnName) KEY INDEX UI_TableName_ColumnName WITH STOPLIST = SYSTEM", true);

注意调用Sql 中的第二个参数以抑制事务。如果您省略,您可能会收到错误说明:

CREATE FULLTEXT CATALOG 语句不能在用户事务中使用

【讨论】:

  • 做,我需要索引我想使用的列名吗?
  • 是的,您需要先设置全文索引。
  • 我在应用自定义迁移时收到CREATE FULLTEXT CATALOG statement cannot be used inside a user transaction.。有什么想法吗?
  • @Liero 您需要在Sql 调用中禁止事务,只需为第二个参数调用值为true 的重载,例如Sql("CREATE....", true);
  • 那么,如果我们想要搜索多个列,我们就完全不走运了?
猜你喜欢
  • 2019-10-07
  • 1970-01-01
  • 2020-03-29
  • 2018-12-27
  • 1970-01-01
  • 2018-11-22
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
相关资源
最近更新 更多