Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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
C# 使用Database.SqlQuery()的实体框架,其中列名是无效的C成员名 实体框架6.1_C#_Sql Server_Entity Framework - Fatal编程技术网

C# 使用Database.SqlQuery()的实体框架,其中列名是无效的C成员名 实体框架6.1

C# 使用Database.SqlQuery()的实体框架,其中列名是无效的C成员名 实体框架6.1,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我有一个存储过程,它返回以下结果: 因此,这些字段名自然不是生成的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

我有一个存储过程,它返回以下结果:

因此,这些字段名自然不是生成的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_usGetPassengerCountByAgerReturndTo的内容之间进行转换


有人能给我指出正确的方向吗?

不幸的是,列的映射是不可能的。这已经被请求了很多年,并且最终得到了支持,使其在codeplex上达到了建议的状态,但是SqlQuery还没有达到这个状态

链接:

使用工作环境更新

如果可以修改存储的进程,那么这是使字段匹配的最佳方法。如果不可能,则可以创建一个表变量,其中包含与poco匹配的所需输出列,然后在表变量中插入/EXEC,最后从表变量中选择*。然后,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

那太酷了。。。。我无法修改SP,因此使用了SQL解决方案,效果很好。遗憾的是必须这样做,但你不能拥有一切-