实体框架6.1
我有一个返回以下结果的存储过程:
因此,这些字段名自然不是生成的poco的有效标识符,我将其修改为:

public class AdHoc_UspGetPassengerCountByAgeReturnDto
{
    public Int32? _0_18 { get; set; }
    public Int32? _19_30 { get; set; }
    public Int32? _31_40 { get; set; }
    public Int32? _41_50 { get; set; }
    public Int32? _51_60 { get; set; }
    public Int32? _61_70 { get; set; }
    public Int32? _71_80 { get; set; }
    public Int32? _81plus { get; set; }
}

由于属性名称更改,请执行以下操作:
public List<AdHoc_UspGetPassengerCountByAgeReturnDto> AdHoc_UspGetPassengerCountByAge(out int aProcResult)
{
    SqlParameter procResultParam = new SqlParameter {ParameterName = "@procResult", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Output};

    List<AdHoc_UspGetPassengerCountByAgeReturnDto> procResultData =
            Database.SqlQuery<AdHoc_UspGetPassengerCountByAgeReturnDto>("EXEC @procResult = [AdHoc].[usp_GetPassengerCountByAge] ", procResultParam).ToList();

    aProcResult = (int) procResultParam.Value;
    return procResultData;
}

返回空值,因为名称不匹配。
因此,我试图解决的是如何执行sp调用,但返回一些泛型类型,以便在返回给我的Adhoc_uspgetpassengercountbyagereturndto的内容之间进行转换。
有人能告诉我正确的方向吗?

最佳答案

不幸的是,无法映射列。多年来一直有人要求这样做,现在终于得到了支持,使其在codeplex上达到了“建议”状态,但是sqlquery还没有做到这一点。
链接:http://entityframework.codeplex.com/workitem/233?PendingVoteId=233
使用解决方案更新
如果可以修改存储过程,则这是使字段匹配的最佳方法。如果这是不可能的,那么您可以创建一个表变量,其中包含与poco匹配的所需输出列,然后INSERT/EXEC进入表变量,最后SELECT *从表变量。然后,sql命令变成:

DECLARE @Data TABLE (
    _0_18 INT,
    _19_30 INT,
    _31_40 INT,
    _41_50 INT,
    _51_60 INT,
    _61_70 INT,
    _71_80 INT,
    _81plus INT
)
INSERT @Data
    EXEC @procResult = [AdHoc].[usp_GetPassengerCountByAge]
SELECT * FROM @Data

09-07 01:12