C# 使用Database.SqlQuery()的实体框架,其中列名是无效的C成员名 实体框架6.1
我有一个存储过程,它返回以下结果: 因此,这些字段名自然不是生成的POCO的有效标识符,我已将其修改为: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
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解决方案,效果很好。遗憾的是必须这样做,但你不能拥有一切-