【发布时间】:2020-03-21 20:40:43
【问题描述】:
我在我的项目中使用 asp net core,将 dapper ORM 和 Postgresql 作为数据库。我想检查数据库中是否存在具有特定 UUID(C# 中的 GUID)值的用户。以下是我检查相同的代码:
public async Task<bool> DoesRecordExistAsync(Guid columnValue)
{
bool doesRecordExist;
doesRecordExist = await _connection.ExecuteScalarAsync<bool>("SELECT * FROM employee_master WHERE employee_id = @columnValue;", new { columnValue });
return doesRecordExist;
}
注意:_connection 是 IDbconnection 实例。
执行语句时,出现以下错误:
对象必须实现 IConvertible。
上面的代码有什么问题吗。
【问题讨论】:
-
您为什么认为查询可以转换为
bool?我假设您想改为使用SELECT COUNT(*)...并将其转换为int。如果 int 值大于零,则返回true。 -
ExecuteScalarAsync() 将选择一个值。如果转换后的类型指定为 bool,则返回 bool 值取决于该记录是否存在。与 LINQ 中的 Any() 相同。
-
你希望 Dapper 如何将整个记录转换为
bool? -
不。
ExecuteScalar(及其异步变体)将选择第一行的第一列。这种类型可能会有所不同。一般不要使用SELECT *,绝对不要与ExecuteScalar结合使用。 -
@DavidG 参考来自这个答案:stackoverflow.com/questions/39006512/…
标签: c# postgresql asp.net-core dapper