Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架中的表值函数?_C#_.net_Entity Framework - Fatal编程技术网

C# 实体框架中的表值函数?

C# 实体框架中的表值函数?,c#,.net,entity-framework,C#,.net,Entity Framework,是否可以使用实体框架调用表值函数(TVF) 我在数据库中定义了三个TVF,它们不会出现在实体框架的模型中,也不会出现在“从数据库更新模型”向导中 在LINQtoSQL中很容易做到这一点,只需将TVF拖到设计图面上,但在L2E中似乎不可能做到 到目前为止,我还没有发现任何提到TVFs和Entity Framework的内容。似乎没有,而且在下一个版本中也不可能 如果您只需要从Code First 4.3中的TVF中以键入列表的形式获取结果,您可以在数据库上下文中设置帮助程序,例如 publ

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

我在数据库中定义了三个TVF,它们不会出现在实体框架的模型中,也不会出现在“从数据库更新模型”向导中

在LINQtoSQL中很容易做到这一点,只需将TVF拖到设计图面上,但在L2E中似乎不可能做到


到目前为止,我还没有发现任何提到TVFs和Entity Framework的内容。

似乎没有,而且在下一个版本中也不可能


如果您只需要从Code First 4.3中的TVF中以键入列表的形式获取结果,您可以在数据库上下文中设置帮助程序,例如

    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; }
        }
    }
公共类ModelDbContext:DbContext { 公共IEnumerable FunctionTableValue(字符串functionName,SqlParameter[]参数) { 参数=参数??新的SqlParameter[]{}; string commandText=string.Format(“SELECT*FROM dbo.{0}”,string.Format(“{0}({1})”,functionName,string.Join(“,”,parameters.SELECT(x=>x.ParameterName)); 返回ObjectContext.ExecuteStoreQuery(commandText,parameters).ToArray(); } 私有对象上下文对象上下文 { 获取{return(作为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);
}
使用(var db=new ModelDbContext())
{
var参数=新的SqlParameter[]
{
新的SqlParameter(“@Id”,SqlDbType.Int),
};
参数[0]。值=1234;
var items=db.FunctionTableValue(“fn_GetFoos”,参数);
}

2011年6月EF的CTP为TVFs带来了支持,如本文所述。