Git Product home page Git Product logo

fissoft.entityframework.fts's Introduction

Fissoft.EntityFramework.Fts

Full Text Search for Microsoft SQL Server with Entity Framework

NuGet Install

install from nuget Build status release CodeFactor

PM> Install-Package Fissoft.EntityFramework.Fts

Demo

Execute init code on start or static ctor.

    DbInterceptors.Init();

When search you can use the code following.

    var text = FullTextSearchModelUtil.Contains("code");
    db.Tables.Where(c=>c.Fullname.Contains(text));
    var text = FullTextSearchModelUtil.FreeText("code ef");
    db.Tables.Where(c=>c.Fullname.Contains(text));
    var text = FullTextSearchModelUtil.ContainsAll("code ef");
    db.Tables.Where(c=>c.Name.Contains(text)); //c.Name could be any string property of model
    var text = FullTextSearchModelUtil.FreeTextAll("code ef");
    db.Tables.Where(c=>c.Name.Contains(text)); //c.Name could be any string property of model
    var text = FullTextSearchModelUtil.Contains("a b",true);
    var query = db.TestModel.Where(c => c.Name.Contains(text)).ToList(); 
    // Should return results that contain BOTH words. For the second param = false, should return records with either of the words

Multi field query

var query = db.TestModel
                    .Where(c => (c.Name+c.Text).Contains(text))
                    .ToList();

will generate the sql

SELECT 
    [Extent1].[Id] AS [Id], 
    [Extent1].[Text] AS [Text], 
    [Extent1].[Name] AS [Name]
    FROM [dbo].[TestModels] AS [Extent1]
    WHERE CONTAINS(([Extent1].[Name] , [Extent1].[Text]),@p__linq__0);

Reference:

http://www.entityframework.info/Home/FullTextSearch

About .NET Core

In .NET core 2.1 you can use offical freetext method to search.

Install the package Microsoft.EntityFrameworkCore.SqlServer.

   using Microsoft.EntityFrameworkCore;
   var result = db.TestModel.Where(c => EF.Functions.FreeText(c.Text, "search"));

EF.Docs# Use FreeText( and soon Contains )functions

fissoft.entityframework.fts's People

Contributors

chsword avatar icnocop avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fissoft.entityframework.fts's Issues

Referenced assembly 'Fissoft.EntityFramework.Fts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' does not have a strong name.

Thank you for Fissoft.EntityFramework.Fts 1.0.0.8.

When I try to reference Fissoft.EntityFramework.Fts.dll in a strong named assembly, I get the following error:
Referenced assembly 'Fissoft.EntityFramework.Fts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' does not have a strong name.

I expected the assembly to be signed by a strong name so that it can be used by other strong-named assemblies.

Thank you!

return null use library fts

 return null on use code : 

var text = FullTextSearchModelUtil.Contains("web", true); var query = db.Mainindustapp.Where(c => c.UnitName.Contains(text)).ToList(); return query.ToList();

return data on use code :

Mainindustapp = db.database.SqlQuery ("SELECT * FROM[DB_table].[dbo].[Mainindustapps] WHERE FREETEXT(([UnitName], [Product]), @p0)", SearchString);

Error: Fts was not replaced on

FTS was not replaced on: SELECT 
    [GroupBy1].[A1] AS [C1]
    FROM ( SELECT 
        COUNT(1) AS [A1]
        FROM [dbo].[Task_tb] AS [Extent1]
        WHERE ([Extent1].[CompanyId] = @p__linq__0) AND (0 = [Extent1].[isArchived]) AND ((([Extent1].[CompanyId] = @p__linq__1) AND (CASE WHEN ([Extent1].[Taskname] IS NULL) THEN N'' ELSE [Extent1].[Taskname] END + CASE WHEN ([Extent1].[Description] IS NULL) THEN N'' ELSE [Extent1].[Description] END LIKE @p__linq__2 ESCAPE N'~')) OR ( EXISTS (SELECT 
            1 AS [C1]
            FROM [dbo].[Files] AS [Extent2]
            WHERE ([Extent1].[TaskId] = [Extent2].[TaskId]) AND ([Extent2].[Name] LIKE @p__linq__3 ESCAPE N'~')
        )) OR ( EXISTS (SELECT 
            1 AS [C1]
            FROM [dbo].[Task_activity] AS [Extent3]
            WHERE ([Extent1].[TaskId] = [Extent3].[TaskId]) AND (2 = [Extent3].[Type]) AND ([Extent3].[Text] LIKE @p__linq__4 ESCAPE N'~')
        )))
    )  AS [GroupBy1]

Support for wildcard strings?

Hi, Do you have any plans to extend functionality to incorporate wildcards in strings. Currently i'm using the library but injecting " + string + "* however I thought it could be useful functionality to have an optional boolean switch to "use wildcard matching" and facilitate as part of the word breaker.

Fix 7 Style issues in Fissoft.EntityFramework.Fts.Tests\FreeTextTest.cs

CodeFactor found multiple issues:

The variable name 'orWord' begins with a prefix that looks like Hungarian notation. Remove the prefix or add it to the list of allowed prefixes.

Fissoft.EntityFramework.Fts.Tests\FreeTextTest.cs:25
Commit ebf464c
Fissoft.EntityFramework.Fts.Tests\FreeTextTest.cs:48
Commit ebf464c

An opening curly bracket must not be followed by a blank line.

Fissoft.EntityFramework.Fts.Tests\FreeTextTest.cs:10
Commit 72ed9ac

The spacing around the symbol ':' is invalid.

Fissoft.EntityFramework.Fts.Tests\FreeTextTest.cs:9
Commit 72ed9ac
Fissoft.EntityFramework.Fts.Tests\FreeTextTest.cs:9
Commit 72ed9ac

Invalid spacing around the semicolon.

Fissoft.EntityFramework.Fts.Tests\FreeTextTest.cs:32
Commit ebf464c
Fissoft.EntityFramework.Fts.Tests\FreeTextTest.cs:55
Commit ebf464c

FTS was not replaced on...

System.Data.Entity.Core.EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details. ---> System.Exception: FTS was not replaced on: SELECT
    [Project10].[TotalLikes] AS [TotalLikes],
    [Project10].[Id] AS [Id],
    [Project10].[Title] AS [Title],
    [Project10].[Text] AS [Text],
    [Project10].[AttachedText] AS [AttachedText],
    [Project10].[Url] AS [Url],
    [Project10].[PrivacyScope] AS [PrivacyScope],
    [Project10].[CreatedOn] AS [CreatedOn],
    [Project10].[InsertedOn] AS [InsertedOn],
    [Project10].[AttachedUrl] AS [AttachedUrl],
    [Project10].[PassId] AS [PassId],
    [Project10].[PassedOn] AS [PassedOn],
    [Project10].[AvgLikesPerDay] AS [AvgLikesPerDay],
    [Project10].[MinAge] AS [MinAge],
    [Project10].[MaxAge] AS [MaxAge],
    [Project10].[Gender] AS [Gender],
    [Project10].[Urls] AS [Urls],
    [Project10].[ActorsNames] AS [ActorsNames],
    [Project10].[MediaTexts] AS [MediaTexts],
    [Project10].[Label_Id] AS [Label_Id]
    FROM ( SELECT
        [Extent1].[Id] AS [Id],
        [Extent1].[Title] AS [Title],
        [Extent1].[Text] AS [Text],
        [Extent1].[AttachedText] AS [AttachedText],
        [Extent1].[Url] AS [Url],
        [Extent1].[PrivacyScope] AS [PrivacyScope],
        [Extent1].[CreatedOn] AS [CreatedOn],
        [Extent1].[InsertedOn] AS [InsertedOn],
        [Extent1].[AttachedUrl] AS [AttachedUrl],
        [Extent1].[PassId] AS [PassId],
        [Extent1].[PassedOn] AS [PassedOn],
        [Extent1].[TotalLikes] AS [TotalLikes],
        [Extent1].[AvgLikesPerDay] AS [AvgLikesPerDay],
        [Extent1].[MinAge] AS [MinAge],
        [Extent1].[MaxAge] AS [MaxAge],
        [Extent1].[Gender] AS [Gender],
        [Extent1].[Urls] AS [Urls],
        [Extent1].[ActorsNames] AS [ActorsNames],
        [Extent1].[MediaTexts] AS [MediaTexts],
        [Extent1].[Label_Id] AS [Label_Id]
        FROM  [dbo].[Ads] AS [Extent1]
        LEFT OUTER JOIN [dbo].[Labels] AS [Extent2] ON [Extent1].[Label_Id] = [Extent2].[Id]
        WHERE ((@p__linq__0 IS NULL) OR ( EXISTS (SELECT
            1 AS [C1]
            FROM  [dbo].[Encounters] AS [Extent3]
            INNER JOIN [dbo].[MyAppUsers] AS [Extent4] ON [Extent3].[MyAppUser_Id] = [Extent4].[Id]
            WHERE ([Extent3].[Ad_Id] = [Extent1].[Id]) AND ([Extent4].[Birthday] IS NOT NULL) AND ((DATEPART (year, [Extent4].[Birthday])) <= ((DATEPART (year, SysUtcDateTime())) - @p__linq__1))
        ))) AND ((@p__linq__2 IS NULL) OR ( EXISTS (SELECT
            1 AS [C1]
            FROM  [dbo].[Encounters] AS [Extent5]
            INNER JOIN [dbo].[MyAppUsers] AS [Extent6] ON [Extent5].[MyAppUser_Id] = [Extent6].[Id]
            WHERE ([Extent5].[Ad_Id] = [Extent1].[Id]) AND ([Extent6].[Birthday] IS NOT NULL) AND ((DATEPART (year, [Extent6].[Birthday])) >= ((DATEPART (year, SysUtcDateTime())) - @p__linq__3))
        ))) AND ((@p__linq__4 IS NULL) OR (( CAST(LEN(@p__linq__4) AS int)) = 0) OR ( EXISTS (SELECT
            1 AS [C1]
            FROM  [dbo].[Encounters] AS [Extent7]
            LEFT OUTER JOIN [dbo].[MyAppUsers] AS [Extent8] ON [Extent7].[MyAppUser_Id] = [Extent8].[Id]
            WHERE ([Extent7].[Ad_Id] = [Extent1].[Id]) AND (([Extent8].[Gender] = @p__linq__5) OR (([Extent8].[Gender] IS NULL) AND (@p__linq__5 IS NULL)))
        ))) AND ((@p__linq__6 IS NULL) OR ([Extent1].[AvgLikesPerDay] > @p__linq__7)) AND ((@p__linq__8 IS NULL) OR ([Extent1].[TotalLikes] > @p__linq__9)) AND ((@p__linq__10 IS NULL) OR ( EXISTS (SELECT
            1 AS [C1]
            FROM  [dbo].[Encounters] AS [Extent9]
            LEFT OUTER JOIN [dbo].[MyAppUsers] AS [Extent10] ON [Extent9].[MyAppUser_Id] = [Extent10].[Id]
            WHERE ([Extent9].[Ad_Id] = [Extent1].[Id]) AND (([Extent10].[Country] = @p__linq__11) OR (([Extent10].[Country] IS NULL) AND (@p__linq__11 IS NULL)))
        ))) AND ((@p__linq__12 IS NULL) OR ([Extent2].[LabelName] = @p__linq__13) OR (([Extent2].[LabelName] IS NULL) AND (@p__linq__13 IS NULL))) AND ((@p__linq__14 IS NULL) OR ( EXISTS (SELECT
            1 AS [C1]
            FROM [dbo].[AdActors] AS [Extent11]
            WHERE ([Extent1].[Id] = [Extent11].[Ad_Id]) AND ([Extent11].[Actor_Id] = @p__linq__15)
        ))) AND ((@p__linq__16 IS NULL) OR ((N'video' = @p__linq__17) AND ( EXISTS (SELECT
            1 AS [C1]
            FROM [dbo].[Media] AS [Extent12]
            WHERE ([Extent1].[Id] = [Extent12].[Ad_Id]) AND (([Extent12].[Type] = @p__linq__18) OR (([Extent12].[Type] IS NULL) AND (@p__linq__18 IS NULL)))
        ))) OR (( NOT ((N'video' = @p__linq__19) AND (@p__linq__19 IS NOT NULL))) AND ( NOT EXISTS (SELECT
            1 AS [C1]
            FROM [dbo].[Media] AS [Extent13]
            WHERE ([Extent1].[Id] = [Extent13].[Ad_Id]) AND ((N'video' = [Extent13].[Type]) OR (CASE WHEN ( NOT ((N'video' = [Extent13].[Type]) AND ([Extent13].[Type] IS NOT NULL))) THEN cast(1 as bit) WHEN (N'video' = [Extent13].[Type]) THEN cast(0 as bit) END IS NULL))
        )))) AND ((@p__linq__20 IS NULL) OR ((@p__linq__21 IS NULL) AND (([Extent1].[Text] LIKE @p__linq__22 ESCAPE N'~') OR ([Extent1].[AttachedText] LIKE @p__linq__23 ESCAPE N'~') OR ([Extent1].[MediaTexts] LIKE @p__linq__24 ESCAPE N'~') OR ([Extent1].[Urls] LIKE @p__linq__25 ESCAPE N'~') OR ([Extent1].[ActorsNames] LIKE @p__linq__26 ESCAPE N'~'))) OR ((N'url' = @p__linq__27) AND ([Extent1].[Urls] LIKE @p__linq__28 ESCAPE N'~')) OR ((N'advertiser' = @p__linq__29) AND ([Extent1].[ActorsNames] LIKE @p__linq__30 ESCAPE N'~')) OR ((N'text' = @p__linq__31) AND (([Extent1].[Text] LIKE @p__linq__32 ESCAPE N'~') OR ([Extent1].[AttachedText] LIKE @p__linq__33 ESCAPE N'~') OR ([Extent1].[MediaTexts] LIKE @p__linq__34 ESCAPE N'~'))) OR ((N'comments' = @p__linq__35) AND ( EXISTS (SELECT
            1 AS [C1]
            FROM [dbo].[Comments] AS [Extent14]
            WHERE ([Extent1].[Id] = [Extent14].[Ad_Id]) AND (([Extent14].[Text] LIKE @p__linq__36 ESCAPE N'~') OR ([Extent14].[MyAppUserName] LIKE @p__linq__37 ESCAPE N'~'))
        )))) AND ((@p__linq__38 IS NULL) OR ( EXISTS (SELECT
            1 AS [C1]
            FROM [dbo].[Snapshots] AS [Extent15]
            WHERE ([Extent1].[Id] = [Extent15].[Ad_Id]) AND ([Extent15].[TakenOn] >= @p__linq__39)
        )))
    )  AS [Project10]
    ORDER BY [Project10].[CreatedOn] DESC
    OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY

LINQ to Entities does not recognize the method 'System.String FreeText(System.String)' method, and this method cannot be translated into a store expression.

Thank you for Fissoft.EntityFramework.Fts.

When I try to run the query db.Table1.Where(x => x.Field1.Contains(FullTextSearchModelUtil.FreeText(searchTerm)); I get the following exception:
Type:
System.NotSupportedException
Message:
LINQ to Entities does not recognize the method 'System.String FreeText(System.String)' method, and this method cannot be translated into a store expression.
Stack Trace:

   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.DefaultTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateFunctionIntoLike(MethodCallExpression call, Boolean insertPercentAtStart, Boolean insertPercentAtEnd, Func`5 defaultTranslator)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.StringContainsTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.BinaryTranslator.TypedTranslate(ExpressionConverter parent, BinaryExpression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.BinaryTranslator.TypedTranslate(ExpressionConverter parent, BinaryExpression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input, DbExpressionBinding& binding)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateSet(Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.GroupJoinTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SelectManyTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateSet(Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.BinarySequenceMethodTranslator.TranslateLeft(ExpressionConverter parent, Expression expr)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.BinarySequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateSet(Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.AggregateTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)   at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.Convert()   at System.Data.Entity.Core.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption)   at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__6()   at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)   at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__5()   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)   at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)   at System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()   at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()   at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)   at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__3[TResult](IEnumerable`1 sequence)   at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot)   at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[TResult](Expression expression)   at System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[TResult](Expression expression)   at System.Linq.Queryable.LongCount[TSource](IQueryable`1 source)

I'm using EntityFramework.6.1.2 and Code First.

Any ideas?

Thank you.

FTS was not replaced on...

Hi
when I do single column search it works fine, but when I do multiple search search coding like:
using (var container = new ProductSystemContainer(1)) { var text = FullTextSearchModelUtil.Contains("三星 iphone5",true); var q = container.Sku.Where(c => (c.Title+c.Keywords).Contains(text)); container.Database.Log = Console.WriteLine; var a = q.ToList(); Assert.IsTrue(a.Count>1); }
it shows error

测试方法 ProductTest.SqlServerFullTextTest.FullTextTest 引发了异常:
System.Data.Entity.Core.EntityCommandExecutionException: 执行命令定义时出错。有关详细信息,请参阅内部异常。 ---> System.Exception: FTS was not replaced on: SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Title] AS [Title],
[Extent1].[Keywords] AS [Keywords],
[Extent1].[Description] AS [Description],
[Extent1].[Created] AS [Created],
[Extent1].[LastModified] AS [LastModified]
FROM [dbo].[Sku] AS [Extent1]
WHERE [Extent1].[Title] + CASE WHEN ([Extent1].[Keywords] IS NULL) THEN N'' ELSE [Extent1].[Keywords] END LIKE @p__linq__0 ESCAPE N'~'
在 Fissoft.EntityFramework.Fts.FtsInterceptor.ReplacePropertyWithParameterKeyword(FtsSetting setting, String flag, String text, DbCommand cmd)
在 Fissoft.EntityFramework.Fts.FtsInterceptor.ReplaceProperty(DbCommand cmd, String flag)
在 Fissoft.EntityFramework.Fts.FtsInterceptor.RewriteFullTextQuery(DbCommand cmd)
在 Fissoft.EntityFramework.Fts.FtsInterceptor.ReaderExecuting(DbCommand command, DbCommandInterceptionContext1 interceptionContext) 在 System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<Reader>b__d(IDbCommandInterceptor i, DbCommand t, DbCommandInterceptionContext1 c)
在 System.Data.Entity.Infrastructure.Interception.InternalDispatcher1.Dispatch(TTarget target, Func3 operation, TInterceptionContext interceptionContext, Action3 executing, Action3 executed)
在 System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand command, DbCommandInterceptionContext interceptionContext)
在 System.Data.Entity.Internal.InterceptableDbCommand.ExecuteDbDataReader(CommandBehavior behavior)
在 System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
在 System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
--- 内部异常堆栈跟踪的末尾 ---
在 System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
在 System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute(ObjectContext context, ObjectParameterCollection parameterValues)
在 System.Data.Entity.Core.Objects.ObjectQuery1.<>c__DisplayClass7.<GetResults>b__6() 在 System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction(Func1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
在 System.Data.Entity.Core.Objects.ObjectQuery1.<>c__DisplayClass7.<GetResults>b__5() 在 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Func1 operation)
在 System.Data.Entity.Core.Objects.ObjectQuery1.GetResults(Nullable1 forMergeOption)
在 System.Data.Entity.Core.Objects.ObjectQuery1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0() 在 System.Data.Entity.Internal.LazyEnumerator1.MoveNext()
在 System.Collections.Generic.List1..ctor(IEnumerable1 collection)
在 System.Linq.Enumerable.ToList(IEnumerable`1 source)
在 ProductTest.SqlServerFullTextTest.FullTextTest() 位置 SqlServerFullTextTest.cs: line 28

"System.Data.SqlClient.SqlException: Syntax error near ... in the full-text search condition ..." when using special characters

I expected to be able to perform a full text search using special characters.

Here is an example unit test that fails for each of these special characters, but there could be more.

        [TestMethod]
        public void Contains_UsingSpecialCharacters_Succeeds()
        {
            foreach (string specialCharacter in new[]
            {
                "\"",
                "'",
                ")",
                "(",
                "%"
            })
            {
                using (var db = new MyDbContext())
                {
                    db.Database.Log = Console.WriteLine;
                    var text = FullTextSearchModelUtil.Contains(specialCharacter);
                    var query = db.TestModel
                        .Where(c => c.Name.Contains(text))
                        .ToList();
                }
            }
        }

Any work-arounds or recommendations?

Thank you!

中文乱码怎么解决

原生的Contains,是这样的,N'中文'
使用FullTextSearchModelUtil.Contains之后,@p__linq__0='(??) ,是没有加上N;
我看 FullTextSearchModelUtil.Contains("内衣") 返回的是(-FTSFULLTEXTCONTAINS-内衣),这个有办法处理吗?

Fix 7 Style issues in Fissoft.EntityFramework.Fts.Tests\Issue10Test.cs

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.