C# 从Dapper QueryAsync接收空值返回游标

C# 从Dapper QueryAsync接收空值返回游标,c#,asp.net-core,stored-procedures,model,dapper,C#,Asp.net Core,Stored Procedures,Model,Dapper,我的一个dapper调用返回一个游标,其中所有列数据都为null,我遇到了一个问题 我们有几个调用看起来与此调用相同,它们返回所提供模型的列表。我仍然对C#、.Net和Dapper越来越熟悉,所以可能有一些简单的东西我没有 我们的SQL存储过程期望: Procedure ListItemGrid(pUserId in number, pListType in varchar2, pSearch

我的一个dapper调用返回一个游标,其中所有列数据都为
null
,我遇到了一个问题

我们有几个调用看起来与此调用相同,它们返回所提供模型的列表。我仍然对C#、.Net和Dapper越来越熟悉,所以可能有一些简单的东西我没有

我们的SQL存储过程期望:

Procedure ListItemGrid(pUserId     in number,
                       pListType   in varchar2,
                       pSearchTerm in varchar2,
                       pId         in varchar2,
                       pOut        out sys_refcursor
                       )
短小精悍的电话:

公共异步任务ListItemGrid(字符串id,字符串listType=null,字符串searchTerm=null) { 使用(var conn=this.GetConnection()) { var p=新的OracleDynamicParameters(); p、 添加(“pUserId”,值:this.userResolverService.UserId,dbType:OracleDbType.Double,direction:ParameterDirection.Input); p、 添加(“pListType”,值:listType,dbType:OracleDbType.Varchar2,大小:4000,方向:ParameterDirection.Input); p、 添加(“pSearchTerm”,值:searchTerm,dbType:OracleDbType.Varchar2,大小:4000,方向:ParameterDirection.Input); p、 添加(“pId”,值:id,数据库类型:OracleDbType.Varchar2,大小:4000,方向:ParameterDirection.Input); p、 添加光标(“撅嘴”); var itemList=await conn.QueryAsync(“SQL_PKG.ListItemGrid”,参数:p,commandType:commandType.StoredProcedure); 返回itemList.AsList(); } } 其中
SQL\u PKG.ListItemGrid
返回与
ListItem
模型形状相同的光标:

使用系统;
使用Proj.Name.Infrastructure.DataAccess;
名称空间Proj.Name.Models
{
公共类列表项
{
[列(“名称”)]
公共字符串名称{get;set;}
[栏目(“其他栏目”)]
公共字符串其他{get;set;}
[第三栏(“第三栏”)]
公共字符串第三个{get;set;}
...
}
}
应为:一个包含数据库中值的
ListItem
列表

[
{
键:“字符串值”,
第二个键:“其他字符串值”,
...
},
{ ... },
{ ... }
]
实际值:长度正确的
ListItem
列表,每个值的键都来自
ListItem
,但
null

[
{
key:null,
键二:空,
...
},
{ ... },
{ ... }
]

为什么所有值的
null

经过一些尝试和错误后,更改:

使用系统;
使用Proj.Name.Infrastructure.DataAccess;
名称空间Proj.Name.Models
{
公共类列表项
{
[列(“名称”)]
公共字符串名称{get;set;}
[栏目(“其他栏目”)]
公共字符串其他{get;set;}
[第三栏(“第三栏”)]
公共字符串第三个{get;set;}
...
}
}
到大写字母:

使用系统;
使用Proj.Name.Infrastructure.DataAccess;
名称空间Proj.Name.Models
{
公共类列表项
{
[列(“名称”)]
公共字符串名称{get;set;}
[栏目(“其他栏目”)]
公共字符串其他{get;set;}
[第三栏(“第三栏”)]
公共字符串第三个{get;set;}
...
}
}
修正了我的问题

这仍然让人困惑,因为我们的其他模型/简洁的调用都是小写的如果有人知道这一点不一致的原因,请告诉我。


更新:我没有意识到
是由我们编写的函数提供的,并且是以不区分大小写的方式编写的。

让我从引用文章开始:

SQL:2008和SQL-99标准将数据库定义为case 标识符不敏感,除非它们被引用。小写 可以在标识符和关键字中使用字符,但需要考虑 是大写字母对应的

我看到您正在使用Oracle数据库。Oracle遵守上述标准。我看不到您的存储过程定义,但是如果您的存储过程是用双引号围绕字段名定义的,那么它们将被视为区分大小写/大写。很可能是这样

因此,您自己的解决方案将列名称大写是有意义的