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 返回參數值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM