是否可以使用實體框架調用表值函數(TVF)?實體框架中的值表函數?
我在我的數據庫中定義了三個TVF,它們不顯示在實體框架的模型中或「從數據庫更新模型」嚮導中。
在Linq-to-SQL中很容易做到這一點,只需將TVF拖放到設計界面上,但在L2E中看起來好像不太可能。
到目前爲止,我還沒有發現甚至將TVFs和Entity Framework一起提到的任何東西。
是否可以使用實體框架調用表值函數(TVF)?實體框架中的值表函數?
我在我的數據庫中定義了三個TVF,它們不顯示在實體框架的模型中或「從數據庫更新模型」嚮導中。
在Linq-to-SQL中很容易做到這一點,只需將TVF拖放到設計界面上,但在L2E中看起來好像不太可能。
到目前爲止,我還沒有發現甚至將TVFs和Entity Framework一起提到的任何東西。
如果你只需要得到的結果是從一個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);
}
它似乎不是,也不可能在下一個版本中。
EF 2011年6月CTP帶來了TVFs的支持,在這裏http://blogs.msdn.com/b/adonet/archive/2011/06提到/30/walkthrough-table-valued-functions-june-ctp.aspx。 – 2011-07-08 07:31:30
這可以做現在被接受的答案+1 – kevchadders 2013-09-06 09:15:26