Dapper QueryMultiple()方法从postgreSQL返回null

时间:2017-05-10 11:01:56

标签: c# dapper

所以我正在尝试使用Dapper micro-ORM从网络应用执行QueryMultiple个功能。无论我在public List<JSONData> ExecutePostgres(string spName, List<QueryParam> Params) { List<JSONData> students = new List<JSONData>(); using (var dbInstance = new NpgsqlConnection(postgreConnectionString)) { using (var reader = dbInstance.QueryMultiple(spName, new { std_id = Params[0].value }, commandType: CommandType.StoredProcedure)) { students = reader.Read<JSONData>().ToList(); } } return students; } 方法中作为参数传递的值,我总是得到空值;虽然在数据库中该功能给出了正确的结果。

DAL方法:

public List<string> ExecuteProcedure(string spName, List<QueryParam> Params)
    {
        var list = objDLOperation.ExecutePostgres(spName, Params);
        var strList = new List<string>();

        list.ForEach(x => strList.Add(x.JSONResult));

        return strList;

    }

实施方法:

strList

null始终是 public class JSONData { public string JSONResult { get; set; } } 值列表

实体类:

CREATE OR REPLACE FUNCTION public.usp_getstudent(std_id integer)
RETURNS SETOF json 
AS $function$

BEGIN
RETURN QUERY
select row_to_json(result) from (select * from student where id = std_id) as result;
END  

$function$ LANGUAGE 'plpgsql';

pl / pgSQL功能:

<s:select label="Select a Database" headerKey="-1" headerValue="Select database" list="#{'MySQL':'MySQL', 'Microsoft SQL Server':'Microsoft SQL Server', 'Oracle':'Oracle', 'PostgreSQL':'PostgreSQL'}" name="dbname" onchange="getSchemas(this.value)"/>
    <s:submit value="Submit" onclick="submitDB()" />

1 个答案:

答案 0 :(得分:2)

您的列似乎是名为result,或者是匿名的 - 但您的本地类型有一个名为JSONResult的属性。 Dapper对名字很挑剔。如果你使名字匹配,它应该工作正常。但是,坦率地说:

  • 如果您只返回一列,则不需要实体 - 只需使用<string>(这也会绕过命名问题 - dapper并不关心名称单列提取)
  • 如果您只返回一个网格,则不需要QueryMultiple - 只需使用Query<T>

作为非常次要要点:.AsList()将比.ToList()更有效率 - 避免任何额外的复制。

就个人而言,我说&#34;返回键入的列,而不是JSON&#34;,但是:那取决于你。