Dot-Net
命名列“Id”時,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 欄位有關,但這只是一個猜測。
當我的模型類在映射到 SQL 欄位時具有錯誤的數據類型時,我得到了這個異常。我的模型(錯誤地)是一個 int 並且 SQL 語句正在返回一個字元串。如果您收到這條神秘的錯誤消息,請仔細檢查您的數據類型。
原來是一些安全問題,我扼殺了原始異常並引發了另一個異常。