Entity Framework 執行存儲過程的 獲取 OutPut 參數的值

公司的新項目,手機網站我來負責,我打算拋棄 Linq To Sql ,採用據說效率比較高的 EF 。

雖然在使用過程中遇到了種種問題,但是還是通過搜索前輩的文章找到了解決方案。唯獨今天遇到這個 執行存儲過程讓我很是困惑

首先,在設計器裏導入一個存儲過程。竟然在 數據庫連接的上下文裏找不到這個調用方法。這個有悖常理。我反覆的實驗了有幾次。拖表。託視圖 都OK 啊。

我開始懷疑是不是我Vs的問題。這個時候也去網上搜索了相關問題,但是關於這個問題的解決方法非常少(Google經常訪問不了 ,只能用Baidu)。網上的文章很多都是互相抄襲。答案都差不多。說EF 對存儲過程支持不好。需要手動修改 設計器生成的代碼。我暈。。 這不坑爹麼? 我開始懷疑當初我採用Ef 是不是個錯誤。這是我想如果重現採用 Linq 我要瘋掉。我又是個完美主義者,肯定也不能容忍 項目裏出現兩種數據庫連接方式,何況是一個數據庫的。

繼續搜索。。

就這樣一點一點的找到了調用的方法。先不管能否執行成功。找到調用方法也算是好的開始。

導入的存儲過程需要設置調用方法(Vs裏叫 導入函數映射)

1.設計器右鍵點擊 “模型瀏覽器”,就可以看到樹菜單裏有你先前導入的 存儲過程

2.右鍵存儲過程,點擊 “添加函數導入” ,這裏也是我困惑的地方,返回以下內容的集合 會讓你選擇 返回結果。

我返回沒有結果。但是我有 OutPut參數。我以爲要選擇標量,其實應該選擇無。(這裏也可以返回生成的實體或是 自定義屬性)

點擊確定。這樣就可以像普通表一樣調用了。至於參數,也就是存儲過程的參數,

3.這裏OutPut參數我要解釋一下。存儲過程的最後一個參數傳入的是 ObjectParameter 這個對象

這個就是用於接收 OutPut參數的,

var objectParams = new System.Data.Objects.ObjectParameter("total", DbType.Int32);

var upResult= db.Up_GetXX(1000, objectParams);

var result=objectParams.Value;

這樣 result 就是 存儲過程 OutPut 返回參數值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章