我在c#coreclr上使用Dapper,Sqlite。
public async Task<UserPoco> GetFromEmail(string email)
{
email = email.ToLower();
using (var connection = new SqliteConnection(_configSettings.ConnectionString))
{
connection.Open();
var query = $"SELECT * FROM users WHERE EmailAddress = '{email}';";
var result = await connection.QueryAsync<UserPoco>(query);
return result.FirstOrDefault();
}
}
如果SQL查询在某些时候没有找到结果,那么这个简单的方法会引发异常,下次运行它会找到结果。 它抛出: 无法转换类型&System; System.Int64&#39;输入&#39; System.Int32&#39;。 解析列0时出错(UserId = 86 - Int64)
我很确定它与数据类型无关。 UserPoco具有较长的UserId属性,而DB表用户具有INTEGER类型的UserId,建议使用bigI(long)。此外,例如,如果方法总是找到数据,它将像魅力一样工作。 我认为这与Dapper缓存它运行的每个查询的结果模式这一事实有关,并且当这个模式针对相同的查询进行更改时引发异常: https://github.com/janjosephlim/dapper-dot-net/issues/124
我不明白的是,我怎么能找到更多关于这个或更多人抱怨这种常见情况的信息:我只是多次运行一个非常简单的查询可以带回或不带来结果。
我错过了什么?
答案 0 :(得分:0)
我不知道为什么sqlite误报了数据类型,但是:在最近的预发布版本中,数据类型检查得到了改进。请查看最新的预发布版本:我希望它已经修复。