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

时间:2016-03-27 16:55:52

标签: c# sqlite dapper coreclr

我在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

我不明白的是,我怎么能找到更多关于这个或更多人抱怨这种常见情况的信息:我只是多次运行一个非常简单的查询可以带回或不带来结果。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

我不知道为什么sqlite误报了数据类型,但是:在最近的预发布版本中,数据类型检查得到了改进。请查看最新的预发布版本:我希望它已经修复。