实体框架中的表值函数?

时间:2009-08-18 15:33:14

标签: c# .net entity-framework

是否可以使用Entity Framework调用表值函数(TVF)?

我在我的数据库中定义了三个TVF,它们没有显示在Entity Framework的模型中,也没有显示在“从数据库更新模型”向导中。

很容易在Linq-to-SQL中执行此操作,只需将TVF拖到设计图面上,但在L2E中看起来似乎不太可能。

到目前为止,我还没有找到任何甚至一起提及TVF和实体框架的内容。

2 个答案:

答案 0 :(得分:6)

答案 1 :(得分:6)

如果您只需要在Code-First 4.3中将结果作为类型列表从TVF获取,您可以在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);
}