【发布时间】:2021-03-05 16:13:01
【问题描述】:
我正在尝试使用 Dapper 和 postgres 执行以下操作。
我得到了所有图像,每个模型的 cmets 都嵌套在里面,但总票数始终为 0。我认为这是 Dapper 中的映射,就好像我在 PGAdmin 中手动运行 SQL 一样,它会正确返回。
型号:
public class Image
{
public int Id { get; set; }
public string Url { get; set; }
public DateTime DateTaken { get; set; }
public virtual List<Comment> Comments { get; set; }
public int VoteTotal { get; set; }
}
我的回购代码:
string sql = $"SELECT i.*, c.*, count(v.id) as votetotal " +
$"FROM image i " +
$"INNER JOIN comment c ON i.id = c.imageid " +
$"INNER JOIN vote v ON i.id = v.imageid " +
$"group by i.id, c.id;";
var lookup = new Dictionary<int, Image>();
connection.Query<Image, Comment, Image>(sql, (i, c) =>
{
if (!lookup.TryGetValue(i.Id, out Image image))
{
lookup.Add(i.Id, image = i);
}
if (image.Comments == null) image.Comments = new List<Comment>();
image.Comments.Add(c);
return image;
}).AsQueryable();
json:
[
{
"id": 1,
"url": "google.com/animage",
"dateTaken": "2000-01-01T00:00:00",
"comments": [
{
"id": 5,
"imageId": 1,
"commentText": "two comment",
"createdBy": "Sam",
"createdOn": "2021-03-05T13:39:21.065"
},
{
"id": 4,
"imageId": 1,
"commentText": "one comment",
"createdBy": "Pam",
"createdOn": "2021-03-05T13:39:21.065"
}
],
"voteTotal": 0
}
]
【问题讨论】:
-
dapper 映射不区分大小写吗?你有
public int VoteTotal { get; set; }与count(v.id) as votetotal -
我是这么想的,但不幸的是没有解决这个问题
-
结束了 QueryMultiple 路线,效果更好。
标签: c# json postgresql asp.net-core dapper