Sqlite 短小精悍和向下整数转换
我正在通过System.Data.Sqlite使用Sqlite检查Dapper的v1.25。如果我运行此查询: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
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);
}