私は .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 フィールドのマッピングに関連していると思いますが、それは単なる推測です。