Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 从返回具有可变列的表的实体框架调用存储过程_Asp.net Mvc_Entity Framework - Fatal编程技术网

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

Asp.net mvc 从返回具有可变列的表的实体框架调用存储过程,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我正在使用ASP.NETMVC3和EF4.x 我有一个过程返回一个结果集,但列不是固定的(它可能返回25列,也可能是40或50列) 如何从实体框架调用此存储过程 当我使用函数import时,它要求一个实体。但是我不能选择它,因为没有一列是固定的 实体框架不是用于此目的的合适工具。它擅长静态定义的数据结构,而不擅长动态定义的数据结构 这方面有更好的工具。我会推荐,由。这很容易。只需获取NuGet包并键入以下内容 using Dapper; using (var cnn = new SqlConn

我正在使用ASP.NETMVC3和EF4.x

我有一个过程返回一个结果集,但列不是固定的(它可能返回25列,也可能是40或50列)

如何从实体框架调用此存储过程


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

实体框架不是用于此目的的合适工具。它擅长静态定义的数据结构,而不擅长动态定义的数据结构

这方面有更好的工具。我会推荐,由。这很容易。只需获取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.
    }
}
使用简洁;
使用(var cnn=newsqlconnection(myConnectionString))
{
cnn.Open();
var p=新的动态参数();
p、 添加(“@params”,“Id=21”);
var results=cnn.Query(sql:“GetMyData”,
参数:p,
commandType:commandType.StoredProcess);
foreach(结果中的索引结果)
{
//在这里做点什么。
}
}
Query
是一个简洁的扩展方法,
result
是一个
dapperow
,它是一个实现
IDictionary
的私有类,因此您可以将数据作为每个记录的字典进行访问


除了易于使用之外,它的速度也非常快。

尝试创建一个实体,该实体包含所有可能返回的列,并且包含所有非必需的字段。导入时使用该实体,该实体应能正常工作。如何使用此返回的数据创建新对象?你会通过计算列数来选择正确的实体吗?嗯,我不明白为什么有人会投反对票。是因为我没有逐字回答这个问题吗?嗯,EF没有办法做到这一点。