11

Ahora que SQL Server 2008 tiene búsqueda de texto completo incorporado. Busco a utilizarlo para alimentar la búsqueda de mi sitio web. También estoy buscando utilizar el marco de entidades ADO.NET para mi ORM, pero me preguntaba ¿cómo se hace la búsqueda de texto completo (FTS) con Linq a ADO.NET entidad marco?¿Cómo se hace la búsqueda de texto completo (FTS) con Linq a ADO.NET entity framework?

¿Hay algún soporte en el marco de entidades ADO.NET o estoy atascado usando el method of creating a function which uses the full text search predicates?

+0

¿Está utilizando EF 4 o anterior? –

Respuesta

12

Entity Framework solo admite un subconjunto de la funcionalidad sql disponible (en parte para seguir siendo compatible con una variedad de proveedores). Sin embargo, incluso LINQ-to-SQL (que admite muchas más construcciones específicas de SQL Server, como UDF) no es compatible con texto completo AFAIK.

Creo que necesita utilizar un procedimiento almacenado/udf. Se prefiere el enfoque de UDF, ya que la capa de metadatos es mucho más fuerte, y es componibles en el servidor db - sin embargo, Entity Framework no lo hace (o no lo hizo, la última vez que lo comprobé) como UDF ;-P lo que puede tener para usar un procedimiento almacenado.

+0

En el contexto de la respuesta anterior, esto podría ayudar también: http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql- expressions.aspx –

+0

@Marc, cualquier oportunidad después de todos estos años que se recuerdan en qué consiste el enfoque UDF? (En realidad, no importa, veo algunos ejemplos cuando se utiliza CONTAINSTABLE) –

10

que he visto código como este para EF4:

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

Esto puede ser más simple que la creación de un procedimiento almacenado o UDP en algunos casos.

+0

No es éste susceptible a ataques de inyección SQL? – stefann

+0

@stefann, tengo entendido que EF analiza esto y protege contra tales ataques. –

+1

EF no atrapará ninguna inyección SQL en ese ejemplo en particular. Generaría eso como una consulta SQL parametrizada, que tiene esa protección inherente contra la inyección SQL. Si tuviera que concatenar ese texto de búsqueda en la cadena real, EF analizaría eso y atraparía algunas (no todas) las inyecciones. Capturaría los más molestos como "eliminar de ..." ya que eso no se analizaría correctamente. –

Cuestiones relacionadas