你如何使用Linq到ADO.NET实体框架进行全文搜索(FTS)?

ajm*_*jma 11 c# linq-to-entities full-text-search entity-framework sql-server-2008

现在SQL Server 2008内置了全文搜索.我希望用它来支持我网站的搜索.我也在考虑为我的ORM使用ADO.NET实体框架,但我想知道如何使用Linq到ADO.NET实体框架进行全文搜索(FTS)?

在ADO.NET实体框架中是否有任何支持,或者我是否坚持使用创建使用全文搜索谓词的函数方法

Mar*_*ell 12

实体框架仅支持可用的sql功能的一部分(部分是为了在一系列提供者上保持兼容).但是,即使LINQ-to-SQL(支持更多SQL-Server特定的结构,如UDF)也不支持全文AFAIK.

我相信你需要使用存储过程/ udf.UDF方法是首选,因为元数据层更强大,并且它可以在数据库服务器上组合 - 但是,实体框架没有(或者没有,我上次检查过)像UDF一样;-p所以你可能有使用存储过程.


Dre*_*kes 10

我见过EF4这样的代码:

var query = context.ExecuteStoreQuery<Person>(
        "SELECT * FROM People WHERE FREETEXT(*,{0})", 
        searchText
    ).AsQueryable();
Run Code Online (Sandbox Code Playgroud)

这可能比在某些情况下创建存储过程或UDP更简单.

  • 在该特定示例中,EF 不会捕获任何 SQL 注入。它会将其生成为参数化 SQL 查询,该查询具有针对 SQL 注入的固有保护。如果您要将搜索文本连接到实际字符串中,那么 EF 将解析该文本并捕获一些(不是全部)注入。它会捕获最具破坏性的内容,例如“从...删除”,因为这无法正确解析。 (2认同)