gpt4 book ai didi

c# - 将 dapper 与 .net 核心一起使用时,对象必须实现 IConvertible 异常

转载 作者:行者123 更新时间:2023-11-29 13:07:41 32 4
gpt4 key购买 nike

我在我的项目中使用 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实例。

执行语句时,出现以下错误:

Object must implement IConvertible.

上面的代码有什么问题吗

最佳答案

您的查询“SELECT * FROM ....”正在从数据库中返回匹配的;不是 bool你期待的。 ExecuteScalar将返回第一行的第一列。不能保证 that 列始终是 Boolean;基本上,您也不期望该列的值。

查询应该类似于 select exists(select 1 from...正如解释的那样 here .
它将返回 true/false然后你可以用 await _connection.ExecuteScalarAsync<bool>(...... 处理它.
因此,新代码变为:

bool exists = await _connection.ExecuteScalarAsync<bool>("select exists(select 1 from....);
return exists;

或者(;不推荐),您应该将查询更改为 SELECT COUNT(*) FROM ...获取记录数。阅读有关优化的更多信息 here .
然后你可以把它转换到bool如下所示:

int count = await _connection.ExecuteScalarAsync<int>("SELECT COUNT(*) FROM..........);
bool exists = count == 0 ? false : true;
return exists;

关于c# - 将 dapper 与 .net 核心一起使用时,对象必须实现 IConvertible 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59050752/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com