2009-08-18 87 views
15

是否可以使用实体框架调用表值函数(TVF)?实体框架中的值表函数?

我在我的数据库中定义了三个TVF,它们不显示在实体框架的模型中或“从数据库更新模型”向导中。

在Linq-to-SQL中很容易做到这一点,只需将TVF拖放到设计界面上,但在L2E中看起来好像不太可能。

到目前为止,我还没有发现甚至将TVFs和Entity Framework一起提到的任何东西。

回答

6

如果你只需要得到的结果是从一个TVF一个类型列表代码首先4.3你可以设置您的DbContext例如一个帮手

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

的称呼其为

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

这可以做现在被接受的答案+1 – kevchadders 2013-09-06 09:15:26