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

C# 如何使用Linq到ADO.NET实体框架进行全文搜索(FTS)?,c#,entity-framework,sql-server-2008,linq-to-entities,full-text-search,C#,Entity Framework,Sql Server 2008,Linq To Entities,Full Text Search,现在SQLServer2008内置了全文搜索功能。我希望用它来推动我的网站的搜索。我还考虑在ORM中使用ADO.NET实体框架,但我想知道如何使用Linq到ADO.NET实体框架进行全文搜索(FTS) ADO.NET实体框架中是否有任何支持,或者我一直在使用?实体框架只支持可用sql功能的一个子集(部分是为了在一系列提供程序中保持兼容)。然而,即使是LINQtoSQL(它支持更多特定于SQLServer的构造,如UDF)也不支持全文AFAIK 我认为您需要使用存储过程/udf。首选UDF方法,因

现在SQLServer2008内置了全文搜索功能。我希望用它来推动我的网站的搜索。我还考虑在ORM中使用ADO.NET实体框架,但我想知道如何使用Linq到ADO.NET实体框架进行全文搜索(FTS)


ADO.NET实体框架中是否有任何支持,或者我一直在使用?

实体框架只支持可用sql功能的一个子集(部分是为了在一系列提供程序中保持兼容)。然而,即使是LINQtoSQL(它支持更多特定于SQLServer的构造,如UDF)也不支持全文AFAIK


我认为您需要使用存储过程/udf。首选UDF方法,因为元数据层要强大得多,并且它在db服务器上是可组合的——但是,Entity Framework不喜欢UDF(或者我上次检查时不喜欢UDF)-p因此您可能必须使用存储过程。

我见过类似于EF4的代码:

var query = context.ExecuteStoreQuery<Person>(
        "SELECT * FROM People WHERE FREETEXT(*,{0})", 
        searchText
    ).AsQueryable();
var query=context.ExecuteStoreQuery(
“从自由文本(*,{0})”中选择*,
搜索文本
).AsQueryable();

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

在上面的答案中,这可能也会有所帮助:@Marc,这么多年后,您是否还记得UDF方法需要什么?(事实上,不管怎样,我在使用CONTAINSTABLE时看到了一些示例)您使用的是EF 4还是更早版本?这不容易受到SQL注入攻击吗?@stefann,据我所知,EF会解析并防止此类攻击。在特定示例中,EF不会捕获任何SQL注入。它将生成一个参数化的SQL查询,它具有针对SQL注入的固有保护。如果要将搜索文本连接到实际字符串中,则EF将解析该字符串并捕获一些(而不是全部)注入。它将捕获最具破坏性的命令,如“delete from…”,因为这样无法正确解析。使用参数化命令有助于防范SQL注入攻击,在这种攻击中,攻击者将命令“注入”到SQL语句中,从而危及服务器的安全性。参数化命令通过确保从外部源接收的值仅作为值传递,而不是作为SQL语句的一部分传递,从而防止SQL注入攻击。因此,插入到值中的SQL命令不会在数据源上执行。相反,它们只作为参数值进行计算。@splattne,我的答案中使用的形式确实可以防止SQL注入攻击。检查底部,说明我显示的表单与您链接的表单等效。我的答案中的这个形式更简洁,所以我更喜欢它!