2013-05-15 103 views
1

我正在使用EF從MS SQL中的存儲過程中獲取數據。存儲過程正在返回表。 (列與我的對象中的屬性名稱相同)如何將存儲過程的結果映射到對象

List<MyObject> result = 
       db.ExecuteStoreQuery<MyObject>("EXEC [dbo].myProcedure]").ToList(); 

有沒有辦法在沒有Entity Framework的情況下做到這一點? (用SqlCommand)

謝謝。

+1

您將使用ADO.NET並將其執行到DataReader中,然後將其映射到該對象。 – AliK

回答

2

當然,你可以使用基本的ADO.NET這樣的:

var list = new List<MyObject>(); 
using (SqlConnection c = new SqlConnection("your connection string")) 
{ 
    var cmd = new SqlCommand("EXEC [dbo].myProcedure", c); 
    cmd.CommandType = CommandType.StoredProcedure; 
    using (SqlDataReader sdr = cmd.ExecuteReader()) 
    { 
     while (sdr.Read()) 
     { 
      var o = new MyObject 
      { 
       Property1 = sdr.GetString(0), 
       Property2 = sdr.GetInt32(1), 
       etc... 
      } 
      list.Add(o); 
     } 
    } 
} 

現在記住了SqlDataReader通過索引獲取值,因此,如果您SELECT列表看起來像這樣,Property1, Property3, Property2,那麼他們將是索引如此。

+0

謝謝,你還可以推薦一些automapper嗎?或者我應該以「硬編碼」的方式將SqlDataReder映射到MyObject中? – Chatumbabub

+0

@Chatumbabub,因爲您有一定的靈活性,所以我建議您將您的數據訪問切換到[Dapper](http://code.google.com/p/dapper-dot-net/)。它流線型,快速,並將自動映射對象與查詢。 –

+0

謝謝,我會盡力的。 – Chatumbabub

相關問題