命名列'Id'时,Dapper和“Operation可能会破坏运行时的稳定性”

时间:2013-01-21 12:44:35

标签: .net dapper

我在.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字段有关,但这只是猜测。

2 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:1)

结果发现了一些安全问题,我扼住了原来的异常并引发了另一个异常。