所以我正在尝试使用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()" />
答案 0 :(得分:2)
您的列似乎是名为result
,或者是匿名的 - 但您的本地类型有一个名为JSONResult
的属性。 Dapper对名字很挑剔。如果你使名字匹配,它应该工作正常。但是,坦率地说:
<string>
(这也会绕过命名问题 - dapper并不关心名称单列提取)QueryMultiple
- 只需使用Query<T>
作为非常次要要点:.AsList()
将比.ToList()
更有效率 - 避免任何额外的复制。
就个人而言,我说&#34;返回键入的列,而不是JSON&#34;,但是:那取决于你。