2009-08-18 7 views
15

Est-il possible d'appeler une fonction table-valorisée (TVF) en utilisant Entity Framework?Fonctions de table dans Entity Framework?

J'ai trois TVF définis dans ma base de données, et ils n'apparaissent pas dans le modèle d'Entity Framework, ni dans l'assistant "Mettre à jour le modèle depuis la base de données".

Il est facile de faire cela dans Linq-to-SQL, il vous suffit de faire glisser le TVF sur la surface de conception, mais dans L2E, cela ne semble pas possible. Jusqu'ici je n'ai rien trouvé qui mentionne même TVF et Entity Framework ensemble.

Répondre

6

Si vous avez juste besoin d'obtenir les résultats comme une liste dactylographiée à partir d'une configuration TVF dans le code-First 4.3, vous pouvez une aide sur votre DbContext par exemple

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; } 
     } 
    } 

L'appel comme

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

Cela pourrait être le fait d'être la réponse acceptée maintenant +1 – kevchadders