gpt4 book ai didi

c# - 使用 Database.SqlQuery() 的 Entity Framework ,其中列名是无效的 C# 成员名称

转载 作者:太空狗 更新时间:2023-10-29 19:40:54 26 4
gpt4 key购买 nike

  • Entity Framework 6.1

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

enter image description here

因此,对于我已修改为的生成的 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

关于c# - 使用 Database.SqlQuery() 的 Entity Framework ,其中列名是无效的 C# 成员名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30770766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com