Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use FreeText in EF core 2.1

I see that Entity Framework core 2.1 has a new feature to use FREETEXT, but I am not sure how to use it as there are no examples that I can find online.

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

Has anyone used it yet and could give me a quick example?

like image 444
chobo2 Avatar asked Jun 26 '18 16:06

chobo2


People also ask

Can I use Efcore with .NET framework?

You can use EF Core in APIs and applications that require the full . NET Framework, as well as those that target only the cross-platform .

Does EF core use lazy loading by default?

Lazy Loading is the default behavior of LINQ that's why it is the default behavior of EF Core. With lazy loading, all related entities are not loaded along with the parent entity automatically.


Video Answer


1 Answers

First make sure you have the relevant packages installed Microsoft.EntityFrameworkCore and Microsoft.EntityFrameworkCore.SqlServer.

Then ensure you have the following import:

using Microsoft.EntityFrameworkCore;

Now you can use the FREETEXT SQL function like this:

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

Note: You can see how this works in the unit tests, for example.

To create the full text index, there is currently no support for doing this automatically in Entity Framework Core. Instead, you need to manually add the code to the migration. So, create a migration as you normally do, open it up and add lines similar to this:

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);

Note the 2nd parameter in the call to Sql to suppress transactions. If you omit that you may get an error stating:

CREATE FULLTEXT CATALOG statement cannot be used inside a user transaction

like image 195
DavidG Avatar answered Oct 19 '22 20:10

DavidG