2011-05-29 59 views
3

我試圖在實體框架4應用程序中調用存儲過程,並獲得了奇怪的結果。存儲過程需要參數INOUT,並返回結果集。我映射了存儲過程並創建了一個表示返回結果集中的一行的複合類型。我把它如何調用EF4中的存儲過程

using (MyObjectContext ctx = new MyObjectContext()) 
{ 
    ObjectParameter out1 = new ObjectParameter("out1", typeof(String)); 
    ObjectParameter out2 = new ObjectParameter("out2", typeof(String));  
    var res = ctx.my_proc(1,2, out1,out2); 
} 

的問題是,除非我打電話res.ToList()(或通過res枚舉,或調用訪問底層集合的任何方法),的out1out2null
我該如何解決?
謝謝

+0

在這種情況下,我希望不被直到我稱之爲'ToList執行程序( )'。但實際上它運行。 – a1ex07 2011-05-29 16:59:47

回答

4

你無法修復它。這是一個陷阱。因爲這些輸出參數在最後的結果集中傳輸,因此內部數據讀取器必須首先讀取帶有主數據的返回結果集,然後訪問下一個結果集以讀取輸出參數,因此結果集必須實現或在輸出參數可訪問之前被丟棄。順便說一句。如果直接使用ADO.NET,則是相同的 - 這不是Entity框架本身的一個特性,而是SQL Server如何返回輸出參數的方式,以及DataReader如何按順序使用結果集的方式。

+0

謝謝;無論如何,我需要得到的結果,並通過它們迭代。 – a1ex07 2011-05-29 17:01:59

1

當u調用返回行的表過程或查詢 EF不會真正執行時,用戶調用ToList或枚舉返回值