2014-02-14 56 views
3

我使用ASP.NET MVC 3和EF 4.x的可變列返回表調用存儲過程從實體框架是

我有一個返回結果集,但列沒有固定的程序(它可能返回25列或可能是40或50)。

如何從實體框架調用此存儲過程?

當我使用函數導入它要求實體。但是我無法選擇它,因爲沒有列是固定的。

+0

嘗試創建包含所有可能的列的實體,這些列可以返回並且所有字段都不是必需的。導入它時使用該實體,它應該可以工作。 – ssimeonov

+0

這個返回的數據將如何用於創建新對象?你會通過計算列數來選擇正確的實體嗎? – Alberto

回答

1

實體框架不適合這個。它擅長靜態定義數據結構,而不是動態數據結構。

有更好的工具。我會推薦Dapper,由Marc Gravell創建。這很容易。剛剛得到的NuGet包,並鍵入類似

using Dapper; 

using (var cnn = new SqlConnection(myConnectionString)) 
{ 
    cnn.Open(); 
    var p = new DynamicParameters(); 
    p.Add("@params", "Id=21"); 
    var results = cnn.Query(sql:"GetMyData", 
          param: p, 
          commandType: CommandType.StoredProcedure); 
    foreach(IDictionary<string, object> result in results) 
    { 
     // Do something here. 
    } 
} 

Query是一個小巧玲瓏的擴展方法,resultDapperRow,這是實現IDictionary<string, object>的私有類,所以你可以訪問您的數據爲每條記錄的字典。

除了易於使用,它也很快閃電。

+1

嗯,我不明白爲什麼有人會低估這一點。是因爲我沒有直接回答這個問題嗎?那麼,有沒有辦法*與EF做到這一點。 –