【发布时间】:2009-08-18 15:33:13
【问题描述】:
是否可以使用实体框架调用表值函数 (TVF)?
我的数据库中定义了三个 TVF,它们没有显示在实体框架的模型中,也没有显示在“从数据库更新模型”向导中。
在 Linq-to-SQL 中很容易做到这一点,您只需将 TVF 拖到设计图面上,但在 L2E 中似乎不可能。
到目前为止,我还没有找到任何将 TVF 和实体框架一起提到的东西。
【问题讨论】:
标签: c# .net entity-framework
是否可以使用实体框架调用表值函数 (TVF)?
我的数据库中定义了三个 TVF,它们没有显示在实体框架的模型中,也没有显示在“从数据库更新模型”向导中。
在 Linq-to-SQL 中很容易做到这一点,您只需将 TVF 拖到设计图面上,但在 L2E 中似乎不可能。
到目前为止,我还没有找到任何将 TVF 和实体框架一起提到的东西。
【问题讨论】:
标签: c# .net entity-framework
如果您只需要从 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);
}
【讨论】:
【讨论】: