若结果模式不同,则Dapper在第二次运行查询时抛出异常



我在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为什么误报数据类型,但是:数据类型检查在最近的预发布版本中得到了改进。请查看最新的预发布版本:我希望它已经修复。

最新更新