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