Tengo un sitio web existente desarrollado utilizando ASP.NET MVC 3 y Entity Framework 4 consultando una base de datos Sql Server 2008. Contiene un formulario de búsqueda con alrededor de 10 campos, y cuando el usuario hace clic en el botón Enviar, creo dinámicamente una solicitud de Entity SQL que contiene solo los campos de búsqueda especificados, omitiendo los vacíos. Funciona. Hasta aquí todo bien.Sql Server texto libre a través de Entity Framework
Ahora, el cliente desea un comportamiento de búsqueda de texto completo para uno de los campos. Veo esta solicitud por ser bastante compleja porque (que yo sepa): No
- Entity Framework no admite de forma nativa búsqueda de texto completo
- que quieren evitar procedimientos almacenados para envolver la sintaxis FTS ya que hasta ahora sólo he utilizado SP "estáticos", manteniendo la lógica en el código .NET. Así que quiero tratar de evitar construir la consulta dentro del procedimiento. Y crear un procedimiento por combinación de campo de búsqueda posible no es una opción.
Soluciones me ocurrieron hasta ahora:
- Poner un procedimiento almacenado o una función definida por el usuario como un preadicate seach en la cláusula WHERE (no estoy seguro de que es posible, aunque)
- Conseguir el FTS resulta solo en una tabla temporal y ejecuta los otros filtros en esa tabla temporal. Me temo que las actuaciones no son buenas si hay muchos resultados FTS con esta técnica ...
¿Cuál es la mejor manera de hacer daling con esto?
+1 Este es buen punto. Al hacerlo de esta manera, incluso puede introducir la búsqueda de texto completo en el servidor SQL. Creo que 'sp_executesql' no es necesario porque lo usa' ExecuteStoreCommand' directamente. –
Gracias por esta sugerencia. Traté de mejorarlo manteniendo la creación de consultas de entidad, luego generando la consulta SQL resultante y reemplazando la precía LIKE con una FREETEXT, antes de ejecutarla. – Shtong