从实体框架调用存储过程,返回具有可变列的表

时间:2014-02-14 10:55:00

标签: asp.net-mvc entity-framework

我正在使用ASP.NET MVC 3和EF 4.x

我有一个返回结果集的过程但是列没有修复(它可能返回25列或者可能是40或50)。

如何从Entity Framework调用此存储过程?

当我使用函数导入时,它会要求实体。但我不能选择它,因为没有一个列是固定的。

1 个答案:

答案 0 :(得分: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是Dapper扩展方法,resultDapperRow,它是实现IDictionary<string, object>的私有类,因此您只需将数据作为字典访问每条记录。

除了易于使用外,它也很快。