2009-08-18 12 views
15

¿Es posible llamar a una función con valores de tabla (TVF) utilizando Entity Framework?Funciones con valores de tabla en Entity Framework?

Tengo tres TVF definidos en mi base de datos, y no aparecen en el modelo de Entity Framework ni en el asistente "Actualizar el modelo desde la base de datos".

Es muy posible hacer esto en Linq-to-SQL, simplemente arrastre el TVF a la superficie de diseño, pero en L2E no parece que sea posible.

Hasta ahora no he encontrado nada que mencione TVFs y Entity Framework juntos.

Respuesta

6

Si sólo necesita para obtener los resultados como una lista mecanografiada de un TVF en Código-First 4.3 se puede configurar un ayudante en su DbContext por ejemplo,

public class ModelDbContext : DbContext 
    { 

     public IEnumerable<TOutput> FunctionTableValue<TOutput>(string functionName, SqlParameter[] parameters) 
     { 
       parameters = parameters ?? new SqlParameter[] { }; 

       string commandText = String.Format("SELECT * FROM dbo.{0}", String.Format("{0}({1})", functionName, String.Join(",", parameters.Select(x => x.ParameterName)))); 

       return ObjectContext.ExecuteStoreQuery<TOutput>(commandText, parameters).ToArray(); 
     } 

     private ObjectContext ObjectContext 
     { 
      get { return (this as IObjectContextAdapter).ObjectContext; } 
     } 
    } 

la llamada como

using (var db = new ModelDbContext()) 
{ 
    var parameters = new SqlParameter[] 
    { 
     new SqlParameter("@Id", SqlDbType.Int), 
    }; 
    parameters[0].Value = 1234; 

    var items = db.FunctionTableValue<Foo>("fn_GetFoos", parameters); 
} 
+0

Esto podría ser la respuesta aceptada ahora +1 – kevchadders

Cuestiones relacionadas