2009-08-18 8 views
15

È possibile chiamare una funzione con valori di tabella (TVF) utilizzando Entity Framework?Funzioni con valori di tabella in Entity Framework?

Ho tre TVF definiti nel mio database e non vengono visualizzati nel modello di Entity Framework o nella procedura guidata "Aggiorna modello dal database".

È facile farlo in Linq-to-SQL, è sufficiente trascinare il TVF sulla superficie del progetto, ma in L2E non sembra possibile.

Finora non ho trovato nulla che menzionasse anche TVF ed Entity Framework.

risposta

6

Se avete solo bisogno di ottenere i risultati come un elenco digitato da un TVF nel Codice-First 4.3 è possibile impostare un aiutante sul tuo DbContext esempio

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 chiamata come

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

Questo potrebbe fare con la risposta accettata ora +1 – kevchadders

Problemi correlati