[轉]Entity FrameWork利用Database.SqlQuery<T>執行預存程序並返回參數

來源:互聯網
上載者:User

標籤:result   database   添加   val   string   returns   name   add   sql   

本文轉自;http://www.cnblogs.com/xchit/p/3334782.html

 

目前,EF對預存程序的支援並不完善。存在以下問題:
        EF不支援預存程序返回多表聯集查詢的結果集。
        EF僅支援返回返回某個表的全部欄位,以便轉換成對應的實體。無法支援返回部分欄位的情況。
        雖然可以正常匯入返回標量值的預存程序,但是卻沒有為我們自動產生相應的實體.cs代碼,我們還是無法在代碼中直接調用或使用標量預存程序
        EF不能直接支援預存程序中Output類型的參數。
        其他一些問題。
今天我們利用EF執行sql語句的方式來執行預存程序,並得到OutPut的值。

  首先建立預存程序:

    

?
Create PROCEDURE proc_testEF   (     @id int,     @voteCount int OUTPUT --傳回值  )   AS  BEGIN    SELECT @voteCount = COUNT(*)     FROM ConfirmItem    WHERE ConfirmItemID = @id;     select * from ConfirmItem where [email protected];  END  

  然後寫EF調用方法:

  

?
using (DBEntities context = new DBEntities())           {               var idParam = new System.Data.SqlClient.SqlParameter               {                   ParameterName = "@id",                   Value = 1               };               var votesParam = new System.Data.SqlClient.SqlParameter               {                   ParameterName = "@voteCount",                   Value = 0,                   Direction = ParameterDirection.Output               };               var results = context.Database.SqlQuery<Models.ConfirmItem>(                   "proc_testEF @id, @voteCount out",                    idParam,                   votesParam);                 var person = results.Single();               var votes = (int)votesParam.Value; //得到OutPut類型值               return votes;           }

  測試多次,沒有什麼問題;最後我對方法進行封裝:

  

?
/// <summary>  /// 執行原始SQL命令  /// </summary>  /// <param name="commandText">SQL命令</param>  /// <param name="parameters">參數</param>  /// <returns>影響的記錄數</returns>  public Object[] ExecuteSqlNonQuery<T>(string commandText, params Object[] parameters){    using (DBEntities context = new DBEntities())    {        var results = context.Database.SqlQuery<T>(commandText, parameters);        results.Single();        return parameters;    }}

  調用方式:

  

?
var idParam = new System.Data.SqlClient.SqlParameter               {                   ParameterName = "@id",                   Value = 1               };               var votesParam = new System.Data.SqlClient.SqlParameter               {                   ParameterName = "@voteCount",                   Value = 0,                   Direction = ParameterDirection.Output               };               System.Data.SqlClient.SqlParameter[] parm = {                                                            idParam,                                                           votesParam                                                           };               parm = (System.Data.SqlClient.SqlParameter[])new BLL.Usual.ConfirmItemManager().ExecuteSqlNonQuery<Models.ConfirmItem>("proc_testEF @id, @voteCount out", parm);                              string s = parm[1].Value.ToString();

  當然還有其它的方式,只是覺得這種簡單方便,比起添加實體模型來說,要方便很多!

[轉]Entity FrameWork利用Database.SqlQuery<T>執行預存程序並返回參數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.