2011-06-08 66 views
8

程序我在SqlServer的兩個簡單的存儲過程:執行存儲從的DbContext

  • SetData(@id int, @data varchar(10))
  • GetData(@id int)

GetData當前返回單行單列結果集,但如果需要,我可以將其更改爲適當的函數。

DbContext實例執行這些操作的最佳方法是什麼?

如果可能,我想避免自己做連接狀態管理和/或暴露EF特定類型。我開始檢索ObjectContext並查看Execute*函數,但文檔非常糟糕,缺少涉及存儲過程的示例。

理想情況下,我希望能夠做到這一點:

myContext.ExecuteNonQuery("SetData", id, data); 
var data = myContext.ExecuteScalar<string>("GetData", id); 

回答

21

的DbContext提供這些功能。使用:

IEumerable<...> result = myContext.Database.SqlQuery<...>(...) 

執行檢索存儲的過程和

int result = myContext.Database.ExecuteSqlCommand(...) 

執行數據修改存儲過程。

+0

怎麼樣的參數?我必須按照這裏指定的方式來執行還是有快捷方式? http://stackoverflow.com/questions/4873607/how-to-use-dbcontext-database-sqlquerytelementsql-params-with-stored-procedu/4874600#4874600 – 2011-06-08 18:32:06

+0

這是一種方法。它也應該工作而不使用'SqlParameter' - 只傳遞值。我不確定在直接使用值時,是否不必通過@ p0,@ p1等引用它們。 – 2011-06-08 18:55:22

+0

我最終傳遞了一個匿名對象並將其轉換爲SqlParameters內​​部。 – 2011-06-08 19:29:03