Dot-Net

命名列“Id”時,Dapper 和“操作可能會破壞執行時”

  • April 26, 2013

我在 .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 欄位有關,但這只是一個猜測。

當我的模型類在映射到 SQL 欄位時具有錯誤的數據類型時,我得到了這個異常。我的模型(錯誤地)是一個 int 並且 SQL 語句正在返回一個字元串。如果您收到這條神秘的錯誤消息,請仔細檢查您的數據類型。

原來是一些安全問題,我扼殺了原始異常並引發了另一個異常。

引用自:https://stackoverflow.com/questions/14438916