2009-08-18 14 views
15

Ist es möglich, eine Table-Valued Function (TVF) mit Entity Framework aufzurufen?Tabellenwertfunktionen im Entity Framework?

Ich habe drei TVFs in meiner Datenbank definiert und sie werden nicht im Modell des Entity Framework oder im Assistenten "Update Model from Database" angezeigt.

Es ist leicht möglich, dies in Linq-to-SQL zu tun, ziehen Sie einfach den TVF auf die Designoberfläche, aber in L2E scheint es nicht möglich zu sein.

Bisher habe ich nichts gefunden, das sogar TVFs und Entity Framework zusammen erwähnt.

Antwort

6

Wenn Sie nur die Ergebnisse als typisierte Liste von einem TVF bekommen in-Code-First 4.3 Sie können Setup einen Helfer auf Ihrem DbContext z.B.

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

Die nennen es als

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

Dies könnte damit zu tun haben, jetzt die angenommene Antwort +1 zu sein – kevchadders