我在.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
";
返回_connection。Query(sql, new { CustomerId = customerId }).ToList();
选择"Id"列时出现问题 - 引发验证异常:
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 字段有关,但这只是一个猜测。
当我的模型类在映射到 SQL 字段时具有错误的数据类型时,我遇到了此异常。 我的模型是一个(错误的)int,SQL语句返回一个字符串。 如果收到此神秘错误消息,请仔细检查数据类型。
事实证明,我窒息了原始异常并抛出了另一个异常。