我在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.Int64"类型的对象强制转换为"System.Int32"类型。分析列0时出错(UserId=86-Int64)
我确信它与数据类型无关。UserPoco有一个长UserId属性,DB表用户有一个INTEGER类型的UserId,这是建议存储bigint(long)的UserId。此外,例如,如果该方法总是找到数据,它将像符咒一样工作。我确实认为这与Dapper缓存它运行的每个查询的结果模式有关,并在该模式为他们指出的同一查询更改时抛出异常:https://github.com/janjosephlim/dapper-dot-net/issues/124
我不明白的是,为什么我找不到更多关于这件事的信息,或者更多的人在抱怨这样一种常见的情况:我只是多次运行一个非常简单的查询,它可以返回结果,也可以不返回结果。
我错过了什么?
我不知道sqlite为什么误报数据类型,但是:数据类型检查在最近的预发布版本中得到了改进。请查看最新的预发布版本:我希望它已经修复。