Sqlite 短小精悍和向下整数转换

Sqlite 短小精悍和向下整数转换,sqlite,dapper,system.data.sqlite,Sqlite,Dapper,System.data.sqlite,我正在通过System.Data.Sqlite使用Sqlite检查Dapper的v1.25。如果我运行此查询: var rowCount = dbc.Query<int>("SELECT COUNT(*) AS RowCount FROM Data").Single(); 现在,以下代码将实际处理从Int64到Int32的向下转换: public class QuerySummary { public int RecordCount { get; set; } } var

我正在通过System.Data.Sqlite使用Sqlite检查Dapper的v1.25。如果我运行此查询:

var rowCount = dbc.Query<int>("SELECT COUNT(*) AS RowCount FROM Data").Single();
现在,以下代码将实际处理从Int64到Int32的向下转换:

public class QuerySummary
{
    public int RecordCount { get; set; }
}
var qs = dbc.Query<QuerySummary>("SELECT COUNT(*) AS RecordCount FROM Data").Single();
rowCount = qs.RecordCount;
throw new System.Exception(rowCount.ToString());
公共类查询摘要
{
公共int记录计数{get;set;}
}
var qs=dbc.Query(“从数据中选择COUNT(*)作为RecordCount”).Single();
rowCount=qs.RecordCount;
抛出新的System.Exception(rowCount.ToString());
当我抛出这个异常时,它给出了实际的行数,表明Dapper为我处理了转换


我的问题是,为什么
dbc.Query
处理向下转换的方式与
dbc.Query
类似?这是故意的行为吗?

不,这不是故意的。我已经向github提交并推送了更改,并通过了以下步骤(1.25失败);它很快也会出现在NuGet上:

    // http://stackoverflow.com/q/23696254/23354
    public void DownwardIntegerConversion()
    {
        const string sql = "select cast(42 as bigint) as Value";
        int i = connection.Query<HasInt32>(sql).Single().Value;
        Assert.IsEqualTo(42, i);

        i = connection.Query<int>(sql).Single();
        Assert.IsEqualTo(42, i);
    }
//http://stackoverflow.com/q/23696254/23354
public void DownwardIntegerConversion()
{
const string sql=“选择强制转换(42作为bigint)作为值”;
int i=connection.Query(sql).Single().Value;
IsEqualTo(42,i);
i=connection.Query(sql.Single();
IsEqualTo(42,i);
}

Marc,非常感谢您这么快就解决了这个问题。我查看了NuGet,但它看起来还没有上市。如果我有时间测试它,我今天晚些时候会从Github上抓取它。另外,我很高兴地报告,我在将1.13中存在的可为null的Int64转换为Int32时遇到的一个问题在1.25中消失了。很棒的东西。只是一个简短的报告,我从Github下载了最新的构建,并在我一直使用的几个场景中进行了测试。它工作得很好,没有例外。再次感谢。
    // http://stackoverflow.com/q/23696254/23354
    public void DownwardIntegerConversion()
    {
        const string sql = "select cast(42 as bigint) as Value";
        int i = connection.Query<HasInt32>(sql).Single().Value;
        Assert.IsEqualTo(42, i);

        i = connection.Query<int>(sql).Single();
        Assert.IsEqualTo(42, i);
    }