命名列"Id"时的轻巧和"Operation could destabilize the runtime"



我在.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语句返回一个字符串。 如果收到此神秘错误消息,请仔细检查数据类型。

事实证明,我窒息了原始异常并抛出了另一个异常。

相关内容

最新更新