9

我在 .NET 4.5 中使用 dapper 来轻松查询我的 MS SQl 数据库。以下工作正常:

没问题:

const string sql = @"
SELECT g.Name, g.Slug, g.CreatedDate, COUNT(r.Id) recipientCount
FROM Groups g
LEFT JOIN GroupRecipients r ON r.GroupId = g.Id
WHERE g.CustomerId = @CustomerId
GROUP BY g.Id, g.Name, g.Slug, g.CreatedDate

";

return _connection.Query(sql, new { CustomerId = customerId }).ToList();

选择“Id”列的问题 - 引发 VerificationException

const string sql = @"
SELECT g.Id, g.Name, g.Slug, g.CreatedDate, COUNT(r.Id) recipientCount
FROM Groups g
LEFT JOIN GroupRecipients r ON r.GroupId = g.Id
WHERE g.CustomerId = @CustomerId
GROUP BY g.Id, g.Name, g.Slug, g.CreatedDate

";
return _connection.Query<GroupWithRecipientCount>(sql, new { CustomerId = customerId }).ToList();

抛出异常并显示消息“操作可能会破坏运行时”。

谁能指出我在这里可能做错了什么?我的GroupWithRecipientCount类如下所示:

public class GroupWithRecipientCount
{
    public int Id { get; set; }
    public DateTime CreatedDate { get; set; }
    public string Name { get; private set; }
    public string Slug { get; private set; }
    public int RecipientCount { get; private set; }
}

编辑1:

我删除了这个:

如果我将 Id 列重命名为“Id”以外的其他名称,则一切正常,即

"SELECT g.Id SomeOtherName, g.Name, ..."

如果将我的班级的 Id 字段重命名为 SomeOtherName,看起来它也会中断,所以我猜这个问题与映射 Id 字段有关,但这只是一个猜测。

4

2 回答 2

13

当我的模型类在映射到 SQL 字段时具有错误的数据类型时,我得到了这个异常。我的模型(错误地)是一个 int 并且 SQL 语句正在返回一个字符串。如果您收到这条神秘的错误消息,请仔细检查您的数据类型。

于 2013-04-26T23:52:50.443 回答
1

原来是一些安全问题,我扼杀了原始异常并引发了另一个异常。

于 2013-02-06T19:56:59.257 回答