如何在EF核心2.1中使用FreeText

cho*_*bo2 10 c# freetext entity-framework entity-framework-core

我看到Entity Framework核心2.1有一个新功能可供使用FREETEXT,但我不知道如何使用它,因为没有我可以在网上找到的例子.

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

有人用过它还能给我一个简单的例子吗?

Dav*_*idG 14

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

然后确保您具有以下导入:

using Microsoft.EntityFrameworkCore;
Run Code Online (Sandbox Code Playgroud)

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

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

注意:您可以看到这是如何工作的单元测试,例如.

要创建全文索引,目前不支持在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);
Run Code Online (Sandbox Code Playgroud)

请注意调用中的第二个参数Sql以禁止事务.如果省略,则可能会收到错误消息:

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

  • @Liero您需要抑制`Sql`调用中的事务,只需为第二个参数调用值为`true`的重载,例如`Sql("CREATE....", true);` (2认同)