¿Cómo puedo hacer que Entity Framework reconozca las columnas del procedimiento almacenado dinámico?

Estoy usando Entity Framework 4 y tenemos un montón de procedimientos almacenados en nuestro modelo. Actualmente podemos hacer todo lo que necesitamos. Sin embargo, tenemos un nuevo procedimiento que toma una cadena y, en última instancia, realiza algo como

Create Procedure usp_RunSearch
  @searchTerm VARCHAR(2000)
AS
BEGIN
  DECLARE @sql VARCHAR(4000)
  SET @sql = '
  SELECT ID,
         NAME
  FROM   Users'

  IF(ISNULL(@searchTerm, '') != '')
  BEGIN
    SET @sql = @sql + 'WHERE ' + @searchTerm
  END

  Exec (@sql)
END

para devolver el conjunto de resultados.

EF no parece poder interrogar este procedimiento para obtener la lista de columnas resultante.

¿Hay algo que pueda hacer para ayudar a EF a superar este obstáculo?

preguntado el 10 de mayo de 11 a las 13:05

2 Respuestas

Si solo desea usarlo, puede hacerlo. mira este enlace. http://blogs.msdn.com/b/adonet/archive/2011/02/04/using-dbcontext-in-ef-feature-ctp5-part-10-raw-sql-queries.aspx

Por cierto, intente agregar un valor predeterminado para el parámetro del procedimiento almacenado, que también podría funcionar.

Create Procedure usp_RunSearch
  @searchTerm VARCHAR(2000) = ''
AS

contestado el 10 de mayo de 11 a las 17:05

Intenté esto y también establecí el valor predeterminado para que sea nulo. Creo que la mejor solución es crear mi tipo complejo y mapearlo en la función de importación. esto solo significa que tendremos que realizar un seguimiento de la definición de tipo complejo contra las columnas de retorno de sproc - Adam Stewart

Por cierto, no sé por qué necesita ese sp, pero es posible que esté buscando Dynamic Linq. Dynamiq Linq haría un sp como ese casi innecesario. En caso de que no sepa qué es Dynamic Linq, aquí hay un enlace, puede que esté desactualizado. weblogs.asp.net/scottgu/archive/2008/01/07/… - hazimdikenli

Al final, he creado un ComplexType a mano en el EDMX y configuré la función de importación para que el procedimiento almacenado utilice este tipo complejo definido manualmente. Creo que cuando EF inspecciona el sproc no puede calcular el conjunto de columnas de retorno, aunque la lista de selección es relativamente estática en mi ejemplo.

contestado el 12 de mayo de 11 a las 12:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.