2011-06-30 133 views
0

我有一個正在執行視圖並返回結果的參數化存儲過程。該視圖顯示了兩個表的連接結果。我需要將參數傳遞給此存儲過程,並使用EF 4.1代碼優先方法從MVC3控制器操作中調用它並返回結果。我怎樣才能做到這一點。請一步一步建議。EF 4.1的存儲過程

謝謝。

+0

你好:我用下面的代碼 VAR RS =背景 。 Database.SqlQuery (「EXECUTE AuthenticateUser」)。ToList(); 看來工作,但有問題的視圖返回那裏作爲我的POCO類本人身份證它被定義爲列名「註冊ID」: [關鍵] [列(「註冊ID」) ] public long RegistryID {get;組; } 存儲過程返回的列數及其名稱應與poco類相同嗎? – DotnetSparrow

回答

0

我不知道「代碼優先不支持存儲過程」的哪部分人不理解,但是這種情況不斷出現,它不應該。你可以混淆它(種類),但是如果你需要執行存儲過程,那麼你現在不應該先使用代碼。

+1

僅僅因爲微軟沒有在4.1中包含它並不意味着人們不需要它。爲了我自己的類似目的,我已經將所有連接信息與我的POCO建立了聯繫。我想要做的最後一件事是將一個完全獨立的數據庫模式放在一起,只是爲了執行一些不適合我的POCO模型的任意SP。 –

+0

我從來沒有說過人們不需要它。但是需要或不需要,它不在那裏。 – Tridus

0

我不知道這是否會幫助你,但這裏是如何我使用EF 4.1和DevArt驅動程序調用Oracle proc。這只是返回一個單一的值,但你可能會適應它返回多行。我有一個名爲P_SID.SID_PGet package.proc:

PROCEDURE SID_PGet(io_SID OUT varchar2) is 
Begin 
    io_SID:=GetSID; 
End; 

下面是我如何把它和檢索的SID值:

var parameter = new Devart.Data.Oracle.OracleParameter("io_SID", Devart.Data.Oracle.OracleDbType.VarChar, ParameterDirection.Output); 
this.Database.ExecuteSqlCommand("BEGIN P_SID.SID_PGet(:io_SID); END;", parameter); 
var sid = parameter.Value as string; 

return sid;