我使用ASP.NET MVC 3和EF 4.x的可變列返回表調用存儲過程從實體框架是
我有一個返回結果集,但列沒有固定的程序(它可能返回25列或可能是40或50)。
如何從實體框架調用此存儲過程?
當我使用函數導入它要求實體。但是我無法選擇它,因爲沒有列是固定的。
我使用ASP.NET MVC 3和EF 4.x的可變列返回表調用存儲過程從實體框架是
我有一個返回結果集,但列沒有固定的程序(它可能返回25列或可能是40或50)。
如何從實體框架調用此存儲過程?
當我使用函數導入它要求實體。但是我無法選擇它,因爲沒有列是固定的。
實體框架不適合這個。它擅長靜態定義數據結構,而不是動態數據結構。
有更好的工具。我會推薦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
是一個小巧玲瓏的擴展方法,result
是DapperRow
,這是實現IDictionary<string, object>
的私有類,所以你可以訪問您的數據爲每條記錄的字典。
除了易於使用,它也很快閃電。
嗯,我不明白爲什麼有人會低估這一點。是因爲我沒有直接回答這個問題嗎?那麼,有沒有辦法*與EF做到這一點。 –
嘗試創建包含所有可能的列的實體,這些列可以返回並且所有字段都不是必需的。導入它時使用該實體,它應該可以工作。 – ssimeonov
這個返回的數據將如何用於創建新對象?你會通過計算列數來選擇正確的實體嗎? – Alberto